這個(gè)可以說是cookie中一個(gè)比較熱門的問題,面試的時(shí)候一般很愛聊這方面的問題。
跨域的業(yè)務(wù)需求大概是醬紫:用戶在a.com進(jìn)行了登錄,希望在b.com也同步進(jìn)行了登錄。如果是同一個(gè)主域比較簡單,可以通過setcookie中的domain參數(shù)進(jìn)行設(shè)定:例如有x.a.com和xx.a.com,可以通過設(shè)置domain為a.com,從而a.com的所有二級(jí)域名都可以共享這一個(gè)cookie?;诎踩矫娴脑?,在a.com下面設(shè)置domain為b.com是無效的。
那么是否真的沒有辦法可以實(shí)現(xiàn)這個(gè)了呢?這個(gè)還是有一些奇巧淫技的,這里介紹一種使用內(nèi)框iframe的方法。
具體思路:在a.com下設(shè)置cookie后,嵌入一個(gè)iframe框鏈接b.com的頁面,b.com設(shè)置好頁面cookie后,再嵌入一個(gè)a.com的頁面,然后通過parent.parent就可以調(diào)用最外層的a.com的js方法,從而進(jìn)行跳轉(zhuǎn)或者一些其它的操作。具體代碼示例如下:
假設(shè)a.com有頁面:login.php和callback.php,b.com有頁面synclogin.php
a.com的login.php代碼:
<?php$sso = "e589hR6VnO8K1CNQZ4PSP/LWGBhRKE5VckawQwl1TdE8d4Q5E7tW";setcookie("sso", $sso);?>login success...<script type="text/javascript"> function jumpTo() { location.href = "http://a.com"; }</script><iframe src="http://b.com/synclogin.php?sso=<?php echo $sso; ?>"></iframe>
b.com的synclogin.php頁面
<?phpsetcookie("sso", $_GET["sso"]);?><iframe src="http://a.com/callback.php"></iframe>
a.com的callback.php頁面
<script type="text/javascript"> parent.parent.jumpTo();</script>
聯(lián)系客服