如何設(shè)置一個(gè)嚴(yán)格30分鐘過期的Session示例介紹
更新時(shí)間:2013年07月16日 17:45:41 作者:
SESSION和COOKIE是每個(gè)面試官必問的知識(shí)點(diǎn),下面為大家介紹下如何設(shè)置一個(gè)嚴(yán)格30分鐘過期的Session,具體示例如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
SESSION和COOKIE是每個(gè)面試官必問的知識(shí)點(diǎn),所以希望同學(xué)能深刻學(xué)習(xí)理解這部分以獲得更好的工作機(jī)會(huì)
以下內(nèi)容轉(zhuǎn)之laruence博客(這是個(gè)學(xué)習(xí)PHP的好地方,詳情點(diǎn)擊http://www.laruence.com/)
我在面試的時(shí)候, 經(jīng)常會(huì)問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡單, 這里面包含的知識(shí)挺多, 特別適合考察基本功是否扎實(shí), 誰來回答試試? 呵呵
為什么問這個(gè)問題呢? 1. 我在Twitter上看到了有人討論這個(gè)問題, 2 想起來我經(jīng)常問這個(gè)問題, 所以~~
在這里, 我來解答下這個(gè)題目.
第一種回答
那么, 最常見的一種回答是: 設(shè)置Session的過期時(shí)間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下:
1. 首先, 這個(gè)PHP是用一定的概率來運(yùn)行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個(gè)小概率Notice), 這個(gè)默認(rèn)的值分別是1和100, 也就是有1%的機(jī)會(huì), PHP會(huì)在一個(gè)Session啟動(dòng)時(shí), 運(yùn)行Session gc. 不能保證到30分鐘的時(shí)候一定會(huì)過期.
2. 那設(shè)置一個(gè)大概率的清理機(jī)會(huì)呢? 還是不妥, 為什么? 因?yàn)镻HP使用stat Session文件的修改時(shí)間來判斷是否過期, 如果增大這個(gè)概率一來會(huì)降低性能, 二來, PHP使用”一個(gè)”文件來保存和一個(gè)會(huì)話相關(guān)的Session變量, 假設(shè)我5分鐘前設(shè)置了一個(gè)a=1的Session變量, 5分鐘后又設(shè)置了一個(gè)b=2的Seesion變量, 那么這個(gè)Session文件的修改時(shí)間為添加b時(shí)刻的時(shí)間, 那么a就不能在30分鐘的時(shí)候, 被清理了. 另外還有下面第三個(gè)原因.
3. PHP默認(rèn)的(Linux為例), 是使用/tmp 作為Session的默認(rèn)存儲(chǔ)目錄, 并且手冊中也有如下的描述:
Note: 如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個(gè)地方存儲(chǔ)會(huì)話數(shù)據(jù),則具有最小數(shù)值的腳本會(huì)清理數(shù)據(jù)。此情況下,與 session.save_path 一起使用本指令。
也就是說, 如果有倆個(gè)應(yīng)用都沒有指定自己獨(dú)立的save_path, 一個(gè)設(shè)置了過期時(shí)間為2分鐘(假設(shè)為A), 一個(gè)設(shè)置為30分鐘(假設(shè)為B), 那么每次當(dāng)A的Session gc運(yùn)行的時(shí)候, 就會(huì)同時(shí)刪除屬于應(yīng)用B的Session files.
所以, 第一種答案是不”完全嚴(yán)格”正確的.
第二種答案
還有一種常見的答案是: 設(shè)置Session ID的載體, Cookie的過期時(shí)間, 也就是session.cookie_lifetime. 這種回答也是不正確的, 原因如下:
這個(gè)過期只是Cookie過期, 換個(gè)說法這點(diǎn)就考察Cookie和Session的區(qū)別, Session過期是服務(wù)器過期, 而Cookie過期是客戶端(瀏覽器)來保證的, 即使你設(shè)置了Cookie過期, 這個(gè)只能保證標(biāo)準(zhǔn)瀏覽器到期的時(shí)候, 不會(huì)發(fā)送這個(gè)Cookie(包含著Session ID), 而如果通過構(gòu)造請求, 還是可以使用這個(gè)Session ID的值.
第三種答案
使用memcache, redis等, okey, 這種答案是一種正確答案. 不過, 很顯然出題者肯定還會(huì)接著問你, 如果只是使用PHP呢?
第四種答案
當(dāng)然, 面試不是為了難道你, 而是為了考察思考的周密性. 在這個(gè)過程中我會(huì)提示出這些陷阱, 所以一般來說, 符合題意的做法是:
1. 設(shè)置Cookie過期時(shí)間30分鐘, 并設(shè)置Session的lifetime也為30分鐘.
2. 自己為每一個(gè)Session值增加Time stamp.
3. 每次訪問之前, 判斷時(shí)間戳.
最后, 有同學(xué)問, 為什么要設(shè)置30分鐘的過期時(shí)間: 這個(gè), 首先這是為了面試, 第二, 實(shí)際使用場景的話, 比如30分鐘就過期的優(yōu)惠劵?
SESSION和COOKIE是每個(gè)面試官必問的知識(shí)點(diǎn),所以希望同學(xué)能深刻學(xué)習(xí)理解這部分以獲得更好的工作機(jī)會(huì)
以下內(nèi)容轉(zhuǎn)之laruence博客(這是個(gè)學(xué)習(xí)PHP的好地方,詳情點(diǎn)擊http://www.laruence.com/)
我在面試的時(shí)候, 經(jīng)常會(huì)問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡單, 這里面包含的知識(shí)挺多, 特別適合考察基本功是否扎實(shí), 誰來回答試試? 呵呵
為什么問這個(gè)問題呢? 1. 我在Twitter上看到了有人討論這個(gè)問題, 2 想起來我經(jīng)常問這個(gè)問題, 所以~~
在這里, 我來解答下這個(gè)題目.
第一種回答
那么, 最常見的一種回答是: 設(shè)置Session的過期時(shí)間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下:
1. 首先, 這個(gè)PHP是用一定的概率來運(yùn)行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個(gè)小概率Notice), 這個(gè)默認(rèn)的值分別是1和100, 也就是有1%的機(jī)會(huì), PHP會(huì)在一個(gè)Session啟動(dòng)時(shí), 運(yùn)行Session gc. 不能保證到30分鐘的時(shí)候一定會(huì)過期.
2. 那設(shè)置一個(gè)大概率的清理機(jī)會(huì)呢? 還是不妥, 為什么? 因?yàn)镻HP使用stat Session文件的修改時(shí)間來判斷是否過期, 如果增大這個(gè)概率一來會(huì)降低性能, 二來, PHP使用”一個(gè)”文件來保存和一個(gè)會(huì)話相關(guān)的Session變量, 假設(shè)我5分鐘前設(shè)置了一個(gè)a=1的Session變量, 5分鐘后又設(shè)置了一個(gè)b=2的Seesion變量, 那么這個(gè)Session文件的修改時(shí)間為添加b時(shí)刻的時(shí)間, 那么a就不能在30分鐘的時(shí)候, 被清理了. 另外還有下面第三個(gè)原因.
3. PHP默認(rèn)的(Linux為例), 是使用/tmp 作為Session的默認(rèn)存儲(chǔ)目錄, 并且手冊中也有如下的描述:
Note: 如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個(gè)地方存儲(chǔ)會(huì)話數(shù)據(jù),則具有最小數(shù)值的腳本會(huì)清理數(shù)據(jù)。此情況下,與 session.save_path 一起使用本指令。
也就是說, 如果有倆個(gè)應(yīng)用都沒有指定自己獨(dú)立的save_path, 一個(gè)設(shè)置了過期時(shí)間為2分鐘(假設(shè)為A), 一個(gè)設(shè)置為30分鐘(假設(shè)為B), 那么每次當(dāng)A的Session gc運(yùn)行的時(shí)候, 就會(huì)同時(shí)刪除屬于應(yīng)用B的Session files.
所以, 第一種答案是不”完全嚴(yán)格”正確的.
第二種答案
還有一種常見的答案是: 設(shè)置Session ID的載體, Cookie的過期時(shí)間, 也就是session.cookie_lifetime. 這種回答也是不正確的, 原因如下:
這個(gè)過期只是Cookie過期, 換個(gè)說法這點(diǎn)就考察Cookie和Session的區(qū)別, Session過期是服務(wù)器過期, 而Cookie過期是客戶端(瀏覽器)來保證的, 即使你設(shè)置了Cookie過期, 這個(gè)只能保證標(biāo)準(zhǔn)瀏覽器到期的時(shí)候, 不會(huì)發(fā)送這個(gè)Cookie(包含著Session ID), 而如果通過構(gòu)造請求, 還是可以使用這個(gè)Session ID的值.
第三種答案
使用memcache, redis等, okey, 這種答案是一種正確答案. 不過, 很顯然出題者肯定還會(huì)接著問你, 如果只是使用PHP呢?
第四種答案
當(dāng)然, 面試不是為了難道你, 而是為了考察思考的周密性. 在這個(gè)過程中我會(huì)提示出這些陷阱, 所以一般來說, 符合題意的做法是:
1. 設(shè)置Cookie過期時(shí)間30分鐘, 并設(shè)置Session的lifetime也為30分鐘.
2. 自己為每一個(gè)Session值增加Time stamp.
3. 每次訪問之前, 判斷時(shí)間戳.
最后, 有同學(xué)問, 為什么要設(shè)置30分鐘的過期時(shí)間: 這個(gè), 首先這是為了面試, 第二, 實(shí)際使用場景的話, 比如30分鐘就過期的優(yōu)惠劵?
以下內(nèi)容轉(zhuǎn)之laruence博客(這是個(gè)學(xué)習(xí)PHP的好地方,詳情點(diǎn)擊http://www.laruence.com/)
我在面試的時(shí)候, 經(jīng)常會(huì)問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡單, 這里面包含的知識(shí)挺多, 特別適合考察基本功是否扎實(shí), 誰來回答試試? 呵呵
為什么問這個(gè)問題呢? 1. 我在Twitter上看到了有人討論這個(gè)問題, 2 想起來我經(jīng)常問這個(gè)問題, 所以~~
在這里, 我來解答下這個(gè)題目.
第一種回答
那么, 最常見的一種回答是: 設(shè)置Session的過期時(shí)間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下:
1. 首先, 這個(gè)PHP是用一定的概率來運(yùn)行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個(gè)小概率Notice), 這個(gè)默認(rèn)的值分別是1和100, 也就是有1%的機(jī)會(huì), PHP會(huì)在一個(gè)Session啟動(dòng)時(shí), 運(yùn)行Session gc. 不能保證到30分鐘的時(shí)候一定會(huì)過期.
2. 那設(shè)置一個(gè)大概率的清理機(jī)會(huì)呢? 還是不妥, 為什么? 因?yàn)镻HP使用stat Session文件的修改時(shí)間來判斷是否過期, 如果增大這個(gè)概率一來會(huì)降低性能, 二來, PHP使用”一個(gè)”文件來保存和一個(gè)會(huì)話相關(guān)的Session變量, 假設(shè)我5分鐘前設(shè)置了一個(gè)a=1的Session變量, 5分鐘后又設(shè)置了一個(gè)b=2的Seesion變量, 那么這個(gè)Session文件的修改時(shí)間為添加b時(shí)刻的時(shí)間, 那么a就不能在30分鐘的時(shí)候, 被清理了. 另外還有下面第三個(gè)原因.
3. PHP默認(rèn)的(Linux為例), 是使用/tmp 作為Session的默認(rèn)存儲(chǔ)目錄, 并且手冊中也有如下的描述:
Note: 如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個(gè)地方存儲(chǔ)會(huì)話數(shù)據(jù),則具有最小數(shù)值的腳本會(huì)清理數(shù)據(jù)。此情況下,與 session.save_path 一起使用本指令。
也就是說, 如果有倆個(gè)應(yīng)用都沒有指定自己獨(dú)立的save_path, 一個(gè)設(shè)置了過期時(shí)間為2分鐘(假設(shè)為A), 一個(gè)設(shè)置為30分鐘(假設(shè)為B), 那么每次當(dāng)A的Session gc運(yùn)行的時(shí)候, 就會(huì)同時(shí)刪除屬于應(yīng)用B的Session files.
所以, 第一種答案是不”完全嚴(yán)格”正確的.
第二種答案
還有一種常見的答案是: 設(shè)置Session ID的載體, Cookie的過期時(shí)間, 也就是session.cookie_lifetime. 這種回答也是不正確的, 原因如下:
這個(gè)過期只是Cookie過期, 換個(gè)說法這點(diǎn)就考察Cookie和Session的區(qū)別, Session過期是服務(wù)器過期, 而Cookie過期是客戶端(瀏覽器)來保證的, 即使你設(shè)置了Cookie過期, 這個(gè)只能保證標(biāo)準(zhǔn)瀏覽器到期的時(shí)候, 不會(huì)發(fā)送這個(gè)Cookie(包含著Session ID), 而如果通過構(gòu)造請求, 還是可以使用這個(gè)Session ID的值.
第三種答案
使用memcache, redis等, okey, 這種答案是一種正確答案. 不過, 很顯然出題者肯定還會(huì)接著問你, 如果只是使用PHP呢?
第四種答案
當(dāng)然, 面試不是為了難道你, 而是為了考察思考的周密性. 在這個(gè)過程中我會(huì)提示出這些陷阱, 所以一般來說, 符合題意的做法是:
1. 設(shè)置Cookie過期時(shí)間30分鐘, 并設(shè)置Session的lifetime也為30分鐘.
2. 自己為每一個(gè)Session值增加Time stamp.
3. 每次訪問之前, 判斷時(shí)間戳.
最后, 有同學(xué)問, 為什么要設(shè)置30分鐘的過期時(shí)間: 這個(gè), 首先這是為了面試, 第二, 實(shí)際使用場景的話, 比如30分鐘就過期的優(yōu)惠劵?
SESSION和COOKIE是每個(gè)面試官必問的知識(shí)點(diǎn),所以希望同學(xué)能深刻學(xué)習(xí)理解這部分以獲得更好的工作機(jī)會(huì)
以下內(nèi)容轉(zhuǎn)之laruence博客(這是個(gè)學(xué)習(xí)PHP的好地方,詳情點(diǎn)擊http://www.laruence.com/)
我在面試的時(shí)候, 經(jīng)常會(huì)問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡單, 這里面包含的知識(shí)挺多, 特別適合考察基本功是否扎實(shí), 誰來回答試試? 呵呵
為什么問這個(gè)問題呢? 1. 我在Twitter上看到了有人討論這個(gè)問題, 2 想起來我經(jīng)常問這個(gè)問題, 所以~~
在這里, 我來解答下這個(gè)題目.
第一種回答
那么, 最常見的一種回答是: 設(shè)置Session的過期時(shí)間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下:
1. 首先, 這個(gè)PHP是用一定的概率來運(yùn)行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個(gè)小概率Notice), 這個(gè)默認(rèn)的值分別是1和100, 也就是有1%的機(jī)會(huì), PHP會(huì)在一個(gè)Session啟動(dòng)時(shí), 運(yùn)行Session gc. 不能保證到30分鐘的時(shí)候一定會(huì)過期.
2. 那設(shè)置一個(gè)大概率的清理機(jī)會(huì)呢? 還是不妥, 為什么? 因?yàn)镻HP使用stat Session文件的修改時(shí)間來判斷是否過期, 如果增大這個(gè)概率一來會(huì)降低性能, 二來, PHP使用”一個(gè)”文件來保存和一個(gè)會(huì)話相關(guān)的Session變量, 假設(shè)我5分鐘前設(shè)置了一個(gè)a=1的Session變量, 5分鐘后又設(shè)置了一個(gè)b=2的Seesion變量, 那么這個(gè)Session文件的修改時(shí)間為添加b時(shí)刻的時(shí)間, 那么a就不能在30分鐘的時(shí)候, 被清理了. 另外還有下面第三個(gè)原因.
3. PHP默認(rèn)的(Linux為例), 是使用/tmp 作為Session的默認(rèn)存儲(chǔ)目錄, 并且手冊中也有如下的描述:
Note: 如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個(gè)地方存儲(chǔ)會(huì)話數(shù)據(jù),則具有最小數(shù)值的腳本會(huì)清理數(shù)據(jù)。此情況下,與 session.save_path 一起使用本指令。
也就是說, 如果有倆個(gè)應(yīng)用都沒有指定自己獨(dú)立的save_path, 一個(gè)設(shè)置了過期時(shí)間為2分鐘(假設(shè)為A), 一個(gè)設(shè)置為30分鐘(假設(shè)為B), 那么每次當(dāng)A的Session gc運(yùn)行的時(shí)候, 就會(huì)同時(shí)刪除屬于應(yīng)用B的Session files.
所以, 第一種答案是不”完全嚴(yán)格”正確的.
第二種答案
還有一種常見的答案是: 設(shè)置Session ID的載體, Cookie的過期時(shí)間, 也就是session.cookie_lifetime. 這種回答也是不正確的, 原因如下:
這個(gè)過期只是Cookie過期, 換個(gè)說法這點(diǎn)就考察Cookie和Session的區(qū)別, Session過期是服務(wù)器過期, 而Cookie過期是客戶端(瀏覽器)來保證的, 即使你設(shè)置了Cookie過期, 這個(gè)只能保證標(biāo)準(zhǔn)瀏覽器到期的時(shí)候, 不會(huì)發(fā)送這個(gè)Cookie(包含著Session ID), 而如果通過構(gòu)造請求, 還是可以使用這個(gè)Session ID的值.
第三種答案
使用memcache, redis等, okey, 這種答案是一種正確答案. 不過, 很顯然出題者肯定還會(huì)接著問你, 如果只是使用PHP呢?
第四種答案
當(dāng)然, 面試不是為了難道你, 而是為了考察思考的周密性. 在這個(gè)過程中我會(huì)提示出這些陷阱, 所以一般來說, 符合題意的做法是:
1. 設(shè)置Cookie過期時(shí)間30分鐘, 并設(shè)置Session的lifetime也為30分鐘.
2. 自己為每一個(gè)Session值增加Time stamp.
3. 每次訪問之前, 判斷時(shí)間戳.
最后, 有同學(xué)問, 為什么要設(shè)置30分鐘的過期時(shí)間: 這個(gè), 首先這是為了面試, 第二, 實(shí)際使用場景的話, 比如30分鐘就過期的優(yōu)惠劵?
您可能感興趣的文章:
- 解析PHP的session過期設(shè)置
- ajax實(shí)現(xiàn)session不過期(避免頁面過期的現(xiàn)象)
- 幾種判斷asp.net中session過期方法的比較
- jsp中session過期設(shè)置及web.xml配置學(xué)習(xí)
- 在ASP.NET中,設(shè)置Session的過期時(shí)間的方法
- asp中設(shè)置session過期時(shí)間方法總結(jié)
- ASP中Session技巧 默認(rèn)過期時(shí)間為20分鐘
- PHP中的session永不過期的解決思路及實(shí)現(xiàn)方法分享
- ajax session過期問題的幾個(gè)解決方案
- 判斷Session的過期時(shí)間 采用JavaScript實(shí)時(shí)顯示剩余多少秒
- asp之讓Session永不過期
相關(guān)文章
讓Adobe Reader 7.0 8.1 記住您上次閱讀的位置
今天早上打開昨天看的一個(gè)文檔時(shí),發(fā)現(xiàn)打開后就是我昨天看到的地方,然后關(guān)掉文檔再試,又不是了,于是便想:不會(huì)是Adobe Reader 有自動(dòng)記憶功能吧,這功能不錯(cuò)呀,呵呵中,搜索后發(fā)現(xiàn)還真有,只是版本不同可能位置不同。2008-08-08Win2003的服務(wù)器修改默認(rèn)上傳200k和下載4M的限制
Win2003的服務(wù)器修改默認(rèn)上傳200k和下載4M的限制...2006-07-07大型網(wǎng)吧局域網(wǎng)搭建的各方面注意事項(xiàng)
大型網(wǎng)吧局域網(wǎng)搭建的各方面注意事項(xiàng)...2007-01-01win2k3SP2,VS2005SP1,SQL2005SP2整合方法分析小結(jié)
一直安裝和整合Microsoft Visual Studio 2005 SP1都搞不定,老是出現(xiàn)文件授權(quán)錯(cuò)誤,后來多方查找信息,總算解決了。2008-08-08談?wù)劶夹g(shù)原則,技術(shù)學(xué)習(xí)方法個(gè)人總結(jié)
談?wù)劶夹g(shù)原則,技術(shù)學(xué)習(xí)方法,代碼閱讀及其它個(gè)人總結(jié)這篇文章是前一陣在水木BBS上和別人討論中偶自己發(fā)言的摘編,是偶這幾年開發(fā)過程完全經(jīng)驗(yàn)式的總結(jié)。完全個(gè)人經(jīng)驗(yàn),供批判。2008-06-06破解電信檢測,突破多用戶共享上網(wǎng)補(bǔ)丁包下載
2008-05-05