一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP中SESSION使用中的一點經驗總結

PHP中SESSION使用中的一點經驗總結

2019-12-29 17:09PHP教程網 PHP教程

最近在網上的交流中發現大家對SESSION的使用上有很多誤區,本質上就是不了解SESSION的工作原理

SESSION會話開啟時,會首先發送一個對瀏覽器的唯一標識session_id的cookie(名字為PHPSESSID可以通過session_name()獲取),同session.save_handler = files的情況下,在服務器的指定目錄(如temp)下生成一個沒有后綴的文件,名字是

復制代碼代碼如下:


'sess_" + 'session_id'; 


PHP中SESSION使用中的一點經驗總結 
這樣就完成了基本的設置。那么在下一次發起http請求時,首先瀏覽器會發送這個當前域名下的所有cookie名字和值過去,這樣服務器就能根據cookie中的session_id來去讀取session文件,而不會混淆這個session屬于誰。 

這一步具體如下: 

SESSION發送一個對瀏覽器的唯一cookie變量session_id,這個session_id變量有名字、有值。變量名(name)默認為PHPSESSID,變量值(value)為apach隨機生成的字符串,類似rvag9m368vim7k8g4v7k2ank70 。通常說的session_id其實是指這個唯一的字符串rvag9m368vim7k8g4v7k2ank70。 

具體的在FF的HTTP響應頭下如此: 
PHP中SESSION使用中的一點經驗總結

session_start(); 
 在程序中上面一句就完成了上面的功能,假如瀏覽器沒有發送PHPSESSID的cookie過來就發送一個過去,有就讀取這個cookie,這樣就能維持同一個會話。 

好了既然知道了session的工作原理,那么我們可以推測到假如服務器端sess_rvag9m368vim7k8g4v7k2ank70 這個文件我們手動刪除了,那么session失效,假如瀏覽器cookie失效,那么session照樣失效。 
在手動的情況下: 
在服務器端,可以用 
session_ destroy() 或者session_ unset() 
  來使其失效。 
在瀏覽器端: 
可以直接 
?setcookie('PHPSESSID','',123); 
  讓cookie過期,或者另外一種方式,但不能立即失效 
?session_set_cookie_params($time);//當前時間戳上的秒,例如60,即讓其60秒后過期,<SPAN style="COLOR: #ff0000">不要用時間戳+自己設定的時間。 </SPAN> 
  上面所講的都是讓session提前過期,但是想直接讓session延遲行不行呢?除了修改配置(session.gc_maxlifetime)是不行的,在php.ini里面session.gc_maxlifetime 設置過期時間,到了這個時間,就有session.gc_probability /session.gc_divisor的概率被回收。假如到了這個時間,并且啟動了GC進程,GC會去讀取session文件的修改時間(mtime),發現大于和當前時間相減后大于session.gc_maxlifetime ,立刻刪除。到此,我們也就明白了如何保持這個會話呢,只能在session.gc_maxlifetime 內,必須有用戶在訪問,每次訪問都去修改下session,這樣就這個session又多出session.gc_maxlifetime的存活時間。 
另外說一下session.cookie_lifetime ,設置PHPSESSID在瀏覽器的存活時間,默認為0,IE下我發現是正常的,瀏覽器重啟即cookie失效;FF下還繼續存在。設置session.cookie_lifetime可以用session_set_cookie_params, 
?session_set_cookie_params(60);//60 s session_start(); 
session.gc_maxlifetime和session.cookie_lifetime 共同決定了session的生存時間。 
------------------------------------------------------------- 
剛剛找了一下firefox cookie會話過期的資料,發現如下 

This is apparently by design. Check out this Bugzilla bug:https://bugzilla.mozilla.org/show_bug.cgi?id=443354 

Firefox has a feature where you close Firefox and it offers to save all your tabs, and then you restore the browser and those tabs come back. That's called session restore. What I didn't realize is that it'll also restore all the session cookies for those pages too! It treats it like you had never closed the browser. 

This makes sense in the sense that if your browser crashed you get right back to where you were, but is a little disconcerting for web devs used to session cookies getting cleared. I've got some old session cookies from months ago that were set by sites I always have open in tabs. 

To test this out, close all the tabs in your browser, then close the browser and restart it. I think the session cookies for your site should clear in that case. Otherwise you'd have to turn off session restore. 

這是火狐的會話保存功能,FF設計就是如此。可以做這個close all the tabs in your browser, then close the browser and restart it測試,看看是否還保存著。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 高清在线免费 | 娇妻被老外疯狂调教 | japanesepooping脱粪 | 1024国产精品视频观看 | 亚洲人成在线观看一区二区 | 国产99er66在线视频 | 美女脱了内裤让男桶爽 | 精品一区二区三区视频日产 | 免费超级乱淫视频播放性 | 调教肉文 | 久久热在线视频精品店 | 免费大片 | 希望影院高清免费观看视频 | 色婷婷狠狠 | 青青草色 | 日本美女视频韩国视频网站免费 | 拔插拔插8x8x海外华人免费视频 | 成人看片免费无限观看视频 | free性丰满hd性欧美厨房 | 久久热在线视频精品1 | 国产一久久香蕉国产线看观看 | 我与肥熟老妇的性事 | 教师波多野结衣在线播放 | 国产好痛疼轻点好爽的视频 | 欧美最猛性xxxxx69交 | 色帽子影院 | 国产精品嫩草影院在线 | 女人张开腿让男人桶爽 | 99国产牛牛视频在线网站 | 四虎国产成人免费观看 | 欧美大片一级片 | 免费网站看v片在线成人国产系列 | 日本免费高清在线观看播放 | 粗了大了 整进去好爽视频 刺激一区仑乱 | 全黄一级裸片视频免费 | 91在线 在线播放 | 国产51页| 国产精品久久久久毛片真精品 | 国产亚洲精品一区二区在线播放 | 成年男女免费大片在线观看 | 日韩性公交车上xxhd免费 |