天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP中設(shè)置一個(gè)嚴(yán)格30分鐘過期Session面試題的4種答案

今天在我的微博上發(fā)出一個(gè)問題:

我在面試的時(shí)候, 經(jīng)常會(huì)問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡(jiǎn)單, 這里面包含的知識(shí)挺多, 特別適合考察基本功是否扎實(shí), 誰來回答試試? 呵呵

為什么問這個(gè)問題呢?

1.我在stackoverflow上看到了有人討論這個(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遇到的一個(gè)Permission denied 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)?a href=/itjie/phpjishu/ target=_blank class=infotextkey>php使用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ǔ)目錄, 并且手冊(cè)中也有如下的描述:

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)造請(qǐng)求, 還是可以使用這個(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í)際使用場(chǎng)景的話, 比如30分鐘就過期的優(yōu)惠

主站蜘蛛池模板: 国产色婷亚洲99精品AV | 日本在线高清不卡免费播放 | 伊人电院网 | 9位美女厕所撒尿11分 | 秋霞伦理电影在线看 | 国内精品久久久久影院亚洲 | 国产精品人妻99一区二 | 2019久久这里只精品热在线观看 | 美国一级大黄一片免费的网站 | 花蝴蝶在线观看中字 | 99久久精品国产交换 | 99re8热视频这在线视频 | 国产午夜精品理论片免费观看 | 久久国产精品久久国产精品 | 国产小视频国产精品 | 日韩国产精品欧美一区二区 | 91视频夜色 | 三级网址在线播放 | 亚洲综合色在线视频久 | 亚洲精品永久免费 | 爱豆剧果冻传媒在线播放 | 久久人妻熟女中文字幕AV蜜芽 | 丰满大爆乳波霸奶 | 99爱在线观看精品视频 | 99精品视频在线观看免费播放 | 狠狠色狠狠色综合日日小说 | 日本久久久WWW成人免费毛片丨 | 久久高清免费视频 | 国产精品99久久久久久AV | 伊人情人网综合 | 麻豆精品人妻一区二区三区蜜桃 | 擼擼擼麻豆密臀AV | 亚洲电影二区 | 97色伦图片7778久久 | 公么我好爽再深一点 | 红桃视频国产AV | 久久精品一本到99热 | 久久精品视频uu | 亚洲精品午睡沙发系列 | 日本精品在线观看视频 | 成人精品视频在线观看 |