亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP實現cookie跨域session共享的方法分析

2024-05-05 00:11:02
字體:
來源:轉載
供稿:網友

本文實例講述了PHP實現cookie跨域session共享的方法。分享給大家供大家參考,具體如下:

做過web開發的小伙伴們都了解cookie和session,cookie是存儲在客戶端的,session是存儲在服務器的。

本篇主要通過一些實踐中的案例和大家分享一下踩到坑,重點說明了cookie跨域問題和session服務器共享問題,以php語言為使用語言進行說明。

先聊聊cookie

設置cookie無效

setcookie("sso", "e589hR6VnO8K1CNQZ4PSP/LWGBhRKE5VckawQwl1TdE8d4Q5E7tW", 900);

這個問題很多剛入門php的小伙們都會碰到。這個代碼的本意應當是想設置cookie sso的有效期為15分鐘,可是執行這個代碼后發現沒有效果。為什么呢?因為第三個參數expire表示的是過期的時間節點,而不是有效時間,所以如果希望設置cookie為15分鐘,正確的做法應當是獲取當前的時間戳加上15分鐘。

setcookie這個函數還有path、domain參數都比較常用,強烈建議剛學php的小伙們多翻閱手冊。php手冊地址: http://php.net/manual/zh/index.php

獲取cookie值獲取不到

先看這樣一段代碼

setcookie("sso", "e589hR6VnO8K1CNQZ4PSP/LWGBhRKE5VckawQwl1TdE8d4Q5E7tW", time() + 900);var_dump($_COOKIE["sso"]);

要解決這個問題,要先了解一下setcookie后發生了什么?因為cookie是保存在客戶端的,php是服務端語言,實際上setcookie之后只是在返回的http頭增加一個cookie的頭信息,告訴客戶端需要設置一個醬紫的cookie,如下圖:

PHP,cookie,跨域,session

php中setcookie返回的http頭

而$_COOKIE這個數組里面保存客戶端傳遞上來的cookie。自然第一次刷新的時候因為客戶端沒有相應的cookie值,所以$_COOKIE是沒有sso的信息的。第一次請求過后,因為服務器設置了cookie sso,所以第一次請求過來客戶端就有了cookie sso的信息,所以第二次請求的時候就會帶上sso的信息,服務端就能通過$_COOKIE取到值了。

cookie跨域問題

這個可以說是cookie中一個比較熱門的問題,面試的時候一般很愛聊這方面的問題。

跨域的業務需求大概是醬紫:用戶在a.com進行了登錄,希望在b.com也同步進行了登錄。如果是同一個主域比較簡單,可以通過setcookie中的domain參數進行設定:例如有x.a.com和xx.a.com,可以通過設置domain為a.com,從而a.com的所有二級域名都可以共享這一個cookie?;诎踩矫娴脑?,在a.com下面設置domain為b.com是無效的。

那么是否真的沒有辦法可以實現這個了呢?這個還是有一些奇巧淫技的,這里介紹一種使用內框iframe的方法。

具體思路:在a.com下設置cookie后,嵌入一個iframe框鏈接b.com的頁面,b.com設置好頁面cookie后,再嵌入一個a.com的頁面,然后通過parent.parent就可以調用最外層的a.com的js方法,從而進行跳轉或者一些其它的操作。具體代碼示例如下:

假設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>

代碼看起來也不難,值得一提的是這里嵌入了兩個iframe,因為如果只用一個iframe的話,即在b.com的synclogin.php內直接調用父窗體的jumpTo方法,在有些瀏覽器下會提示沒有權限的錯誤:
Error: Permission denied to access property

這里只是演示了cookie跨域同步的思路,具體細節還有很多可以改進的地方,比如iframe鏈接的頁面可以考慮改成靜態的頁面,這樣效率會比php動態頁面快很多,還有像參數校驗、多個主域(比如還有c.om)同時登錄等等,這里就不再累述。

cookie的總結到這里就結束,如果你感覺有一些收獲,可以在頁面底部掃碼給我打賞喲,感謝O(∩_∩)O~

session

$_SESSION沒有值

這個session使用和cookie有一點不太一樣,session使用前必須先調用session_start方法。否則會收到一個undefined的錯誤:
Notice: Undefined variable: _SESSION

session存儲在哪

session存儲在服務端,但是session究竟是存儲在哪呢?php.ini中關于session有一個save_path的選項可以設置存放的目錄,如果這個選項沒有設置值,那么就存儲在系統默認的tmp目錄下。默認的tmp目錄可以通過sys_get_temp_dir方法取到。

例如在mac下面,php的session一般會存儲在/var/tmp目錄下。

session_start();echo session_id();//本例輸出ipkl446enhae25uq92c28u4lo3$_SESSION['name'] = "tony”;$_SESSION['users'] = array("tony", "andy");

通過session_id方法可以取到當前的session編號,通過這個編號可查看一下該session文件。

$ sudo more /var/tmp/sess_ipkl446enhae25uq92c28u4lo3name|s:4:"tony";users|a:2:{i:0;s:4:"tony";i:1;s:4:"andy";}

可以清楚的看到session存儲數據的結構,其中值是用序列化的方式進行轉化存儲的。

session也用了cookie

session不是存儲在服務端嗎,怎么又和cookie扯上關系了?其實想想也簡單,因為客戶端再請求的時候,服務端怎么樣才能知道該客戶端的session存儲在哪個文件呢?其實也是通過cookie PHPSESSID來進行標識。

PHP,cookie,跨域,session

php中session的cookie標識

php在進行session操作的時候會生成一個session id,而后把這個值以cookie的形式保存在客戶端,就是圖示中的PHPSESSID了??蛻舳嗽谙麓握埱蟮臅r候就會帶上這個PHPSESSID,服務端就能知道當前客戶端對應的session文件了

session超時設置

cookie超時設置比較簡單,一個參數就搞定了。session這邊有點小麻煩,既不能單獨設置cookie PHPSESSID的超時時間,也不能單獨設置服務端文件的超時時間。具體的可以參考鳥哥這篇文章:如何設置一個嚴格30分鐘過期的Session,真的非常嚴謹,贊一下。

session服務器共享

這個問題和cookie的跨域類似,面試的時候也很愛聊這個問題。

以前在做服務器集群的時候會碰到這樣的一樣問題,就是用戶一會訪問是處于正常登錄狀態,一會訪問又沒有登錄了。這個問題偶爾才會出現。跟蹤代碼下去才發現session沒有取到相應的值,想想也是醉了:原來服務器session沒有設置共享,session存在在本地文件目錄,當用戶訪問另外一臺服務器的時候自然就取不到session了。

解決方法也不難,通過共享的存儲在進行服務器之間的共享。這里使用redis的進行session存儲??梢酝ㄟ^php.ini配置文件進行調整,也可以在代碼中通過ini_set進行調整

ini_set("session.save_handler", "redis");ini_set("session.save_path", "tcp://127.0.0.1:6379”);

如果需要使用redis進行存儲,需要session中的Registered save handlers支持redis

PHP,cookie,跨域,session

php中session是否支持redis

當這樣設置之后,session就會保存在redis中了,不同的集群服務器之間就可以通過該redis服務器進行共享了。

好吧,暫時就寫到這里了,以后會發現新的坑會繼續補充上來。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色av网| 亚洲tv在线观看| 久久久女女女女999久久| 亚洲国内精品视频| 国产精品美女午夜av| 国产97人人超碰caoprom| 亚洲大尺度美女在线| 欧美日韩国产影院| 日本国产高清不卡| 国产精品美女主播| 超碰97人人做人人爱少妇| 在线免费看av不卡| …久久精品99久久香蕉国产| 一区二区三区在线播放欧美| 国产精品精品久久久| 亚洲精品一区二区网址| 国产精品日韩在线观看| 欧美成人精品在线播放| 性欧美亚洲xxxx乳在线观看| 欧美老肥婆性猛交视频| 国产精品久久久久久久久久免费| 欧美激情一级欧美精品| 日韩大陆欧美高清视频区| 久久视频在线看| 久久久久久久久国产| 久久精品国产2020观看福利| 亚洲欧美一区二区精品久久久| 日本欧美在线视频| 国产91精品在线播放| 亚洲v日韩v综合v精品v| 国产精品1234| 国产精品扒开腿做爽爽爽的视频| 久久久久在线观看| 亚洲第一偷拍网| 欧美激情区在线播放| 国产精品久久久久免费a∨大胸| 成人黄色片网站| 欧美日韩在线第一页| 国产精品综合网站| 欧美猛交ⅹxxx乱大交视频| 日韩精品极品在线观看| 日韩人在线观看| 欧美性在线观看| 成人免费网站在线观看| 亚洲欧美日韩另类| 992tv在线成人免费观看| 亚洲日韩中文字幕| 国产精品久久国产精品99gif| 欧美成人精品不卡视频在线观看| 中文字幕在线成人| 成人精品在线视频| 国产精品成av人在线视午夜片| 国产一区二区三区视频免费| 日韩欧美大尺度| 欧美孕妇性xx| 亚洲电影免费观看高清完整版在线| 欧美综合在线第二页| 青草青草久热精品视频在线观看| 91影视免费在线观看| 亚洲精品98久久久久久中文字幕| 成人女保姆的销魂服务| 91免费精品国偷自产在线| 久久久久久久久久久91| 国产在线999| 欧美成人免费网| 久久精品国产综合| 91精品视频一区| 久久久久久尹人网香蕉| 欧美成人免费网| 亚洲精品成人久久| 秋霞av国产精品一区| 色多多国产成人永久免费网站| 亚洲精品福利在线| 成人午夜在线观看| 77777少妇光屁股久久一区| 久久久亚洲福利精品午夜| 亚洲欧洲偷拍精品| 久久国产精品亚洲| 久久久久久久久综合| 亚洲一区二区久久久| 国产欧美一区二区白浆黑人| 国产亚洲欧美日韩一区二区| 日韩久久精品成人| 亚洲欧洲日产国码av系列天堂| 久久久国产精品x99av| 国产精品偷伦免费视频观看的| 久久久久久久av| 成人黄色激情网| 国产精品久久久久免费a∨大胸| 久久久999国产| 久热精品在线视频| 日韩高清av在线| 久久久久久国产精品久久| 国产精品久久久久久久天堂| 久久人人看视频| 国内精品小视频| 在线观看精品自拍私拍| 欧美夫妻性生活视频| 欧美黄色成人网| 日韩电影中文字幕在线| 国产精品成人在线| 91高清免费在线观看| 成人欧美一区二区三区在线| 亚洲性猛交xxxxwww| 欧洲亚洲妇女av| 欧美亚洲视频一区二区| 欧美精品成人在线| 亚洲国产日韩欧美综合久久| 九九九久久国产免费| 久久久精品2019中文字幕神马| 亚洲影院高清在线| 国产欧亚日韩视频| 国产精品手机播放| 亚洲综合中文字幕在线| 欧美性猛交xxxx免费看漫画| 最近2019免费中文字幕视频三| 国产精品91免费在线| 日韩av一区二区在线| 91精品国产自产在线老师啪| 日韩激情视频在线| 日本一区二区不卡| 精品视频一区在线视频| 日韩最新中文字幕电影免费看| 欧美性高跟鞋xxxxhd| 91欧美日韩一区| 国产日本欧美在线观看| 高清在线视频日韩欧美| 日韩激情第一页| 久热在线中文字幕色999舞| 91精品国产色综合久久不卡98| 日韩av第一页| 亚洲精品福利免费在线观看| 久久久视频免费观看| 欧美肥臀大乳一区二区免费视频| 国产成人精品视频在线观看| 88国产精品欧美一区二区三区| 久久99精品久久久久久噜噜| 欧美日韩国产丝袜美女| 狠狠久久五月精品中文字幕| 欧美老女人性生活| 国产精品日韩专区| 奇米影视亚洲狠狠色| 久久免费视频这里只有精品| 视频在线观看一区二区| 日本精品免费观看| www.亚洲一区| 成人av.网址在线网站| 日韩视频在线观看免费| 亚洲jizzjizz日本少妇| 国产精品美女999| 中文字幕亚洲精品| 北条麻妃一区二区三区中文字幕| 日韩av电影在线播放| 久久精品国产99国产精品澳门| 欧美电影免费观看网站| 亚洲精品日韩激情在线电影| 57pao成人国产永久免费| 91精品国产高清久久久久久久久| 久久久99免费视频| 欧美日韩亚洲91| 亚洲一区二区三区乱码aⅴ蜜桃女| 精品久久香蕉国产线看观看gif| 精品综合久久久久久97| 91在线免费网站|