當前位置:首頁 » 編程語言 » php設置session過期時間

php設置session過期時間

發布時間: 2023-07-24 18:31:41

php中設置一個嚴格30分鍾過期Session面試題的4種答案

今天在我的微博上發出一個問題:
我在面試的時候,
經常會問一個問題:
「如何設置一個30分鍾過期的Session?」,
大家不要覺得看似簡單,
這裡麵包含的知識挺多,
特別適合考察基本功是否扎實,
誰來回答試試?
呵呵
為什麼問這個問題呢?
1.我在stackoverflow上看到了有人討論這個問題
2.想起來我經常問這個問題,
所以~~
在這里,
我來解答下這個題目.
第一種回答
那麼,
最常見的一種回答是:
設置Session的過期時間,
也就是session.gc_maxlifetime,
這種回答是不正確的,
原因如下:
1.
首先,
這個PHP是用一定的概率來運行session的gc的,
也就是session.gc_probability和session.gc_divisor(介紹參看
PHP使用Session遇到的一個Permission
denied
Notice解決辦法),
這個默認的值分別是1和100,
也就是有1%的機會,
PHP會在一個Session啟動時,
運行Session
gc.
不能保證到30分鍾的時候一定會過期.
2.
那設置一個大概率的清理機會呢?
還是不妥,
為什麼?
因為PHP使用stat
Session文件的修改時間來判斷是否過期,
如果增大這個概率一來會降低性能,
二來,
PHP使用」一個」文件來保存和一個會話相關的Session變數,
假設我5分鍾前設置了一個a=1的Session變數,
5分鍾後又設置了一個b=2的Seesion變數,
那麼這個Session文件的修改時間為添加b時刻的時間,
那麼a就不能在30分鍾的時候,
被清理了.
另外還有下面第三個原因.
3.
PHP默認的(Linux為例),
是使用/tmp
作為Session的默認存儲目錄,
並且手冊中也有如下的描述:
Note:
如果不同的腳本具有不同的
session.gc_maxlifetime
數值但是共享了同一個地方存儲會話數據,則具有最小數值的腳本會清理數據。此情況下,與
session.save_path
一起使用本指令。
也就是說,
如果有倆個應用都沒有指定自己獨立的save_path,
一個設置了過期時間為2分鍾(假設為A),
一個設置為30分鍾(假設為B),
那麼每次當A的Session
gc運行的時候,
就會同時刪除屬於應用B的Session
files.
所以,
第一種答案是不」完全嚴格」正確的.
第二種答案
還有一種常見的答案是:
設置Session
ID的載體,
Cookie的過期時間,
也就是session.cookie_lifetime.
這種回答也是不正確的,
原因如下:
這個過期只是Cookie過期,
換個說法這點就考察Cookie和Session的區別,
Session過期是伺服器過期,
而Cookie過期是客戶端(瀏覽器)來保證的,
即使你設置了Cookie過期,
這個只能保證標准瀏覽器到期的時候,
不會發送這個Cookie(包含著Session
ID),
而如果通過構造請求,
還是可以使用這個Session
ID的值.
第三種答案
使用memcache,
redis等,
okey,
這種答案是一種正確答案.
不過,
很顯然出題者肯定還會接著問你,
如果只是使用PHP呢?
第四種答案
當然,
面試不是為了難道你,
而是為了考察思考的周密性.
在這個過程中我會提示出這些陷阱,
所以一般來說,
符合題意的做法是:
1.
設置Cookie過期時間30分鍾,
並設置Session的lifetime也為30分鍾.
2.
自己為每一個Session值增加Time
stamp.
3.
每次訪問之前,
判斷時間戳.
最後,
有同學問,
為什麼要設置30分鍾的過期時間:
這個,
首先這是為了面試,
第二,
實際使用場景的話,
比如30分鍾就過期的優惠劵?
thanks
:)

㈡ php怎麼設置某個session的過期時間

可以在PHP中,設置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默認24分鍾) 這里你可以隨便設置一下過期時間.但是有人說設置以後,好象不起作用! 其實不是不起作用,而是因為系統默認: session.gc_probability = 1 session.gc_divisor = 1000...
樓主去後盾人看看,那的學習視頻應該可以幫助你解決問題,以及你其他的不太懂的問題

㈢ 為什麼設置php的session

一、介紹
PHP中session默認過期時間是1440S,超過這個時間沒有頁面刷新或者用戶關閉了瀏覽器,session就會失效。
二、設置
session文件存儲在伺服器端,通過保存在用戶端的SessionId與服務鍵液戚器進行交互,session的配置文件是php.ini,相關參數如下:
1.session.use_cookies = 1,默認1,代表SessionId通過cookie來傳遞,否則會用Query_String
2.session.name = PHPSESSID,默認PHPSESSID,代表SessionID儲存的變數名稱,可能是Cookie,也可能是Query_String來傳遞
3.session.cookie_lifetime = 604800,是SessionID在客戶端Cookie儲存的時間,默認是0,代表瀏覽器一關閉SessionID立即失效,這里我設置了7天
4.session.gc_maxlifetime = 604800,默認是1440,代表session在伺服器端保留的時間,超過這個時間就會失效。這里我設置了7天,與客戶端的cookie有效時間一致
三、其他情況
一般情況下把這四個值設置好之後就可以更改session的有效期了,但是當多個站點的session文件都保存在公用埋桐臨時路徑時,由於php的GC(Garbage Collector)機制,某個站點啟動垃圾回收機制,都會把公用臨時文件目錄下的文件全部清除,這就會導致稿陵session失效,解決方法就是更改php.ini里session文件的保存路徑:
session.save_path=『你的路徑』;

熱點內容
sqldecimal轉換 發布:2025-02-07 21:17:50 瀏覽:654
鋼管查詢源碼 發布:2025-02-07 21:15:25 瀏覽:423
濱州伺服器租賃地址 發布:2025-02-07 21:13:41 瀏覽:436
thinkphp刪除資料庫數據 發布:2025-02-07 21:12:03 瀏覽:943
安卓智能手機哪個更便宜 發布:2025-02-07 21:10:24 瀏覽:144
織夢資料庫連接 發布:2025-02-07 21:09:32 瀏覽:351
緩解情緒解壓的句子 發布:2025-02-07 21:04:23 瀏覽:533
mars的android視頻 發布:2025-02-07 21:04:21 瀏覽:779
分布式網路存儲 發布:2025-02-07 21:02:57 瀏覽:571
android設置靜音 發布:2025-02-07 20:11:53 瀏覽:697