PHP的cookie技術(shù)是前端和后端互相通信的重要一環(huán),它可以通過設(shè)置cookie實(shí)現(xiàn)身份驗(yàn)證、記住登錄狀態(tài)等功能。但是在多域名、跨子域等復(fù)雜場景下,可能會(huì)遇到cookie域的問題。
cookie可以設(shè)定作用域或域名,一般情況下,這個(gè)作用域就是產(chǎn)生這個(gè)cookie的服務(wù)器域名。例如:在www.example.com下設(shè)置了一個(gè)cookie,在發(fā)送請求時(shí)只會(huì)攜帶該cookie到www.example.com。
$expire=time()+60*60*24*30; //設(shè)置cookie有效期為30天
setcookie("username", "John", $expire, "/", "www.example.com");
不過當(dāng)要在一個(gè)域名下共享cookie時(shí),比如在www.example.com和blog.example.com之間,我們可以設(shè)置其共同擁有的父域名(例如:.example.com),這樣就可以在兩個(gè)域名下互相訪問了。
$expire=time()+60*60*24*30; //設(shè)置cookie有效期為30天
setcookie("username", "John", $expire, "/", ".example.com");
當(dāng)然,這種共享的情況也有限制,只在二級及以上域名下生效,例如example.com和dev.example.com不能共享cookie。
在Web開發(fā)中,也有其他情況需要注意cookie作用域,例如ajax請求和跨站點(diǎn)請求。
在ajax請求中,如果服務(wù)器返回的響應(yīng)頭包含Set-Cookie,那么瀏覽器會(huì)在響應(yīng)接收完之后自動(dòng)更新cookie。但是跨域請求是無法跨域名、跨協(xié)議、跨端口傳遞cookie的,這時(shí)候就需要通過其他方式例如身份驗(yàn)證Token解決。
總之,在開發(fā)中要注意cookie域的設(shè)置,確認(rèn)其適用的場景,避免出現(xiàn)不必要的麻煩。