php修改session生存时间,修改session的过期(生存)时间
以下我以php為例,萬變不離其宗,希望對大家都有用吧。
session與cookie:
了解過兩者的眾所都知道,有些信息保存到cookie,有些出于安全問題就不能直接存到瀏覽器,這就要用到session了。然而對于瀏覽器,一般都是默認20-30分鐘自動銷毀或者關閉瀏覽器就會銷毀。這顯示是很頭疼的事情,比如我們要實現用戶登陸功能,關閉瀏覽器就要重新登陸,這搞什么鬼?所以我們要去試圖改變它們。網上眾說紛紜,你可以選擇去修改默認配置文件,如php為例,修改php.ini的函數。但是染念卻不喜歡修改修改默認,也在網上看到某些程序員是沒有權限修改的,所以我們需要做到如何不修改默認文件達到這樣的功能。
我們可能在網上看到這樣的一例子:
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
1.通過cookie的有效時間來設置session,我想說,這只是一部分,因為設置cookie有效期沒有錯,但是你沒有傳值,怎么達到修改session的生存時間呢。
2.雖然在你執行了一次后,真的session是24小時了,但是當你關閉瀏覽器后,再打開,session仍然還是需要你重新輸入,因為瀏覽器找不到你的session的id啊...
如何設置session的生存時間呢?要做的就是把session傳給cookie,由cookie給我們保存:
session_start();
isset($PHPSESSID) ? session_id($PHPSESSID) : $PHPSESSID = session_id();
setcookie('PHPSESSID', $PHPSESSID, time()+86400, "/");PHP session工作原理 以下以cookie傳輸PHPSESSID描述。客戶端請求一個php的服務端地址。
服務端收到請求,此次php腳本中包含session_start()。
服務端會生成一個PHPSESSID。(默認session存儲方式為session.save_handler=files,文件形式存儲。生成的session文件名規則即為sess_PHPSESSID,session文件存在session.save_path中。)
服務端響應首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50;
path=/。在客戶端生成一個cookie保存此PHPSESSID。此時,客戶端的cookie里面包含了PHPSESSID,之后客戶端的每次請求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服務端之后每次接收到客戶端的請求就都能根據這個PHPSESSID來找到服務端的session文件,通過對這個session文件的讀寫操作即實現了session的超全局變量屬性。
如果客戶端禁用了cookie,由于無法使用cookie傳遞PHPSESSID,那么客戶端每次請求,服務端都會重新建立一個session文件,而無法通過通過PHPSESSID來重用session文件,所以session也就失效了。
這種情況可以設置session.use_trans_sid來傳輸PHPSESSID,具體實現方式與cookie的區別就是將PHPSESSID通過HTTP的GET傳輸。每次請求的地址里面都會補全PHPSESSID參數”url?PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”來實現。
顧名思義,phpsessid就是當前會話id,session_id($PHPSESSID)達到當前會話,不然沒存在,就要建立一個。然后再通過設置cookie(其實你打開看cookie,就是有PHPSESSID存在,而我們修改了它的存在時間而已),這樣我們才能實現session在你想要的時間內過期,即使瀏覽器關閉了。
總結
以上是生活随笔為你收集整理的php修改session生存时间,修改session的过期(生存)时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fm信号表达式_chirp信号表达式
- 下一篇: WIN10 下 PHP7 中文乱码的解决