php跨域cookie
⑴ cookie機制&跨域問題
推薦閱讀
當用戶第一次訪問並登陸一個網站的時候,cookie的設置以及發送會經歷以下4個階段:
客戶端發送一個請求到伺服器
伺服器發送一個httpResponse響應到客戶端,其中包含set-cookie的頭部
客戶端保存cookie,之後向伺服器發送請求時,httpRequest請求中會包含一個Cookie的頭部
伺服器返回響應數據
cookie的域名
Cookie是不可以跨域名的,隱私安全機制禁止網站非法獲取其他網站的Cookie。
正常情況下,同一個以及域名下的兩個二級域名也不能交互Cookie,比如test1.jianshu.com與test2.jianshu.com,因為二者的域名不完全相同,如果想要jianshu.com名下的二級域名都可以使用該Cookie,需要設置Cookie的domain參數為jianshu.com,這樣使用test1.jianshu.com和test2.jianshu.com就能訪問同一個域名了。
下面是Chrome瀏覽器存儲的一個cookie信息
設置的過程,伺服器設置cookie的時候,需要指定cookie的domain,當domain與當前host的匹配不上的時候,responseHeader里的set-cookie不會設置成功。這也就是cookie不支持跨域問題。
⑵ php 如何實現不同網站登錄跨域的問題
單點登陸(Single Sign-On)技術,採用集中授權方案。這是一個php的一個實現地址。
⑶ 跨域請求如何攜帶cookie不小心都拿了Offer
最近在參加面試找工作,陸陸續續的面了兩三家。其中面試官問到了一個問題:如何解決跨域問題? 我巴巴拉拉的一頓說,大概了說了四種方法,然後面試官緊接著又問:那跨域請求怎麼攜帶cookie呢?(常規的面試套路,一般都會順著你的回答往深了問)由於之前的項目都是同源的,不牽涉跨域訪問,所以一時沒有回答出來,後來研究了下,所以有了這篇文章
閱讀本文,你將學到:
思路:
先看下代碼結構,相對比較的簡單:
A 服務的代碼:
index.html 的代碼:
B 服務的代碼:
首先我們先在 A 服務的 index.html 頁面中得到一個 cookie ,運行 A 服務:
然後打開 http://localhost:8000/static/index.html : 沒有問題的話,頁面長這樣:
這個時候 F12 打開控制台: 可以看到發送了一個 login 請求,並且設置了cookie,也可以選擇瀏覽器控制台的 Application 頁簽,選中 cookie ,可以看到 cookie 的信息:
然後我們點擊頁面上的 發送同源請求 按鈕,可以看到發送了一個user請求,並且已經攜帶上了cookie:
接下來刺激的畫面來了,我們點擊 發送跨域請求 按鈕,出現了跨域請求的報錯:
重點 : 接下來開始解決跨域攜帶cookie問題:
什麼是withCredentials?
XMLHttpRequest.withCredentials 屬性是一個Boolean類型,它指示了是否該使用類似cookies,authorization headers(頭部授權)或者TLS客戶端證書這一類資格證書來創建一個跨站點訪問控制(cross-site Access-Control)請求。在同一個站點下使用withCredentials屬性是無效的。
如果在發送來自其他域的XMLHttpRequest請求之前,未設置withCredentials 為true,那麼就不能為它自己的域設置cookie值。而通過設置withCredentials 為true獲得的第三方cookies,將會依舊享受同源策略,因此不能被通過document.cookie或者從頭部相應請求的腳本等訪問。
這個時候再去發送一個跨域請求,你會發現依舊報錯,但是我們仔細看下報錯,意思是需要設置header的 Access-Control-Allow-Origin 屬性:
我們修改 B (app2.js)服務的代碼:
修改完之後再次發送一個跨域請求,你會發現,又報錯了(接近崩潰),但是跟之前報的錯不一樣了,意思大概就是 Access-Control-Allow-Credentials 這個屬性應該設置為 true ,但是顯示得到的是個 '' :
再次修改B服務的代碼(每次修改後需要重新運行):
再發送一個跨域請求:
可以看到,這個跨域請求已經請求成功並且返回數據了!而且也攜帶了A服務的cookie,這個時候已經大功告成了。
⑷ thinkphp6解決 CORS 跨域
1,在app/middleware.php中添加
中間件,這樣就改成了
*是不安全的,可以在config/cookie.php配置cookie 有效域名的domain
如果介面請求發送了token,會提示Access-Control-Allow-Headers這個問題,tp6默認是這樣
可以在'Access-Control-Allow-Headers' 這一樣加上XXX-token,
我在搞這個時還遇見post請求變成get
把method改成了type
⑸ php js跨域請求,並設置cookies
首先要說的是,閣下的問題看起頗費神,中文英文符號混雜,大小寫混雜,讓閱讀者看起相當吃力。
其次,你跨域,JS不能使用POST和GET請求的,這是瀏覽器安全規則,不過可以使用其它辦法來獲得類似結果。
JS跨域,POST可以通過提交隱藏表單至隱藏框架頁來得到請求結果。而GET請求則可以在目標地址後面加上要請求的GET參數然後抓取目標頁的所有網頁內容,再通過正則處理獲得結果;也可以使用JSON來獲取(詳情請自行學習JSON,很簡單的)。
閣下的問題,只是獲取COOKIE時間,那麼可以直接通過JS抓取目標頁或JSON獲得。而B域名的cookies.php,完全不需要訪問index.php來獲得上一個COOKIE的時間,因為它們是同一個站,index.php能訪問到的COOKIE,cookies.php也能訪問到。
B域名的cookies.php參考如下(僅供參考,具體請根據自己情況另行寫代碼):
if(isset($_COOKIE["user"]))//
$time=$_COOKIE["user"];//
else
$time=0;//
$_COOKIE["user"]=time();
echo$time;
//或輸出JSON,請自行學習
終上,僅是提供一個思路,更多的還是要靠閣下自行摸索學習。
另外,這種跨域請求,建議使用JSON,因為它簡單方便。當你學會了,就表示你會寫介面和使用介面了(雖然這個只是最簡單的介面)。當然除了JSON還可以使用XML,只是性能稍差一些,也不錯