phpcookie跨域
1. php cookie 兩個一級域名如何共享
cookie存儲的策略中,是不允許跨域的,兩個相同的一級域名,不同的二級域名,可以通過同時指定document.domain允許跨域。
如果兩個一級域名都不一樣,那麼客戶端是不允許通信的,HTML5中Communication API允許跨文檔跨域通信,但並不是所有瀏覽器都支持該特性。
因此建議你將需要共享的信息存儲到伺服器端,不同域的客戶端才能訪問。
2. 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不支持跨域問題。
3. 跨域請求如何攜帶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,這個時候已經大功告成了。
4. PHP如何跨域帶cookie請求一個頁面並輸出或跳轉
跨域最好用API,也就是把 cookie的值傳到API數據頁,再到b.com里讀取即可。
5. PHP跨域獲取COOKIE
在沒有輸出之前用:header('P3P:
CP="CURa
ADMa
DEVa
PSAo
PSDo
OUR
BUS
UNI
PUR
INT
DEM
STA
PRE
COM
NAV
OTC
NOI
DSP
COR"');就可以跨域取得cookie值。
6. thinkphp5 跨域驗證碼
假設
前端域名為: http://a.com
服務端域名為: http://b.com
前端頁面地址為: http://a.com/index.html
獲取驗證碼地址: http://b.com/home/verify
驗證驗證碼地址: http://b.com/home/check_verify
事例:前台地址 http://a.com 要向服務端地址 http://b.com 驗證和請求驗證碼
原理:因為在載入驗證碼圖片的時候請求中攜帶了cooike,cooike中存了服務端驗證碼的PHPSESSID。而在驗證過程中因為是跨域請求,ajax是不會攜帶cooike進行提交的。因此需要在ajax設置withCredentials為true時表示當前請求為跨域類型在請求中協帶cookie,並且服務端也必須要設置Access-Control-Allow-Credentials:為true才可以起到實際的效果。
順便貼一下進行請求和驗證的兩個方法:
7. php跨域的時候怎麼謘ession不丟失
session_id 默認是由cookie 走http請求發送到伺服器的
由於cookie是同源同域策略,所以跨域的時候session_id 無法帶過去.可以把session_id 走GET傳參的方式帶過去.只要其他域名帶上了相同的session_id 就能實現回話保持.
8. cookie怎麼跨伺服器 - PHP進階討論
說明,cookie是可以跨主機的,只要這些主機在同一個域下,但是cookie是不能跨域的
9. php 跨域刪除cookie!急急急!!!
在www.b.com
里寫個介面,如www.b.com/cookile/delete?name=name,
在www.a.com中調用介面刪除Cookies。
10. PHP cookie跨域問題
注意你是否設置了setcookie函數的$domain參數。如果內網域名和你設置的不一樣,就無法讀取cookie。但cookie是能寫進去的。
如果你用火狐瀏覽器,使用右鍵->查看頁面信息->安全 來查看cookie內容。看看你的問題出在哪裡。