最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年07月30日 09:27:17   投稿:junjie  
這篇文章主要介紹了PHP中設(shè)置一個(gè)嚴(yán)格30分鐘過期Session面試題的4種答案,需要的朋友可以參考下

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

我在面試的時(shí)候, 經(jīng)常會問一個(gè)問題: “如何設(shè)置一個(gè)30分鐘過期的Session?”, 大家不要覺得看似簡單, 這里面包含的知識挺多, 特別適合考察基本功是否扎實(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ī)會, PHP會在一個(gè)Session啟動時(shí), 運(yùn)行Session gc. 不能保證到30分鐘的時(shí)候一定會過期.

2. 那設(shè)置一個(gè)大概率的清理機(jī)會呢? 還是不妥, 為什么? 因?yàn)镻HP使用stat Session文件的修改時(shí)間來判斷是否過期, 如果增大這個(gè)概率一來會降低性能, 二來, PHP使用”一個(gè)”文件來保存和一個(gè)會話相關(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)存儲目錄, 并且手冊中也有如下的描述:

Note: 如果不同的腳本具有不同的 session.gc_maxlifetime 數(shù)值但是共享了同一個(gè)地方存儲會話數(shù)據(jù),則具有最小數(shù)值的腳本會清理數(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í)候, 就會同時(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í)候, 不會發(fā)送這個(gè)Cookie(包含著Session ID), 而如果通過構(gòu)造請求, 還是可以使用這個(gè)Session ID的值.

第三種答案

使用memcache, redis等, okey, 這種答案是一種正確答案. 不過, 很顯然出題者肯定還會接著問你, 如果只是使用PHP呢?

第四種答案

當(dāng)然, 面試不是為了難道你, 而是為了考察思考的周密性. 在這個(gè)過程中我會提示出這些陷阱, 所以一般來說, 符合題意的做法是:

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)惠劵?

thanks :)

相關(guān)文章

  • 詳解PHP導(dǎo)入導(dǎo)出CSV文件

    詳解PHP導(dǎo)入導(dǎo)出CSV文件

    項(xiàng)目開發(fā)中,很多時(shí)候要將外部CSV文件導(dǎo)入到數(shù)據(jù)庫中或者將數(shù)據(jù)導(dǎo)出為CSV文件,那么具體該如何實(shí)現(xiàn)呢?本文將使用PHP并結(jié)合mysql,實(shí)現(xiàn)了CSV格式數(shù)據(jù)的導(dǎo)入和導(dǎo)出功能。
    2014-11-11
  • PHP環(huán)境搭建(php+Apache+mysql)

    PHP環(huán)境搭建(php+Apache+mysql)

    這篇文章主要為大家詳細(xì)介紹了PHP環(huán)境搭建,包括php、Apache、mysql環(huán)境安裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法

    tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法

    這篇文章主要介紹了tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式簡單分析了mongoDB數(shù)據(jù)庫及thinkPHP5連接、查詢MongoDB數(shù)據(jù)庫的基本操作技巧,需要的朋友可以參考下
    2018-01-01
  • PHP抓取、分析國內(nèi)視頻網(wǎng)站的視頻信息工具類

    PHP抓取、分析國內(nèi)視頻網(wǎng)站的視頻信息工具類

    VideoUrlParser是一款基于PHP根據(jù)視頻URL抓取視頻信息的工具,支持優(yōu)酷、土豆、酷六、56、樂視、搜狐、騰訊、新浪。
    2014-04-04
  • yii2框架中使用下拉菜單的自動搜索yii-widget-select2實(shí)例分析

    yii2框架中使用下拉菜單的自動搜索yii-widget-select2實(shí)例分析

    這篇文章主要介紹了yii2框架中使用下拉菜單的自動搜索yii-widget-select2的方法,介紹了yii-widget-select2的下載,安裝及具體使用技巧,需要的朋友可以參考下
    2016-01-01
  • PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的代碼

    PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的代碼

    這篇文章主要介紹了PHP根據(jù)session與cookie用戶登錄狀態(tài)操作類的相關(guān)資料,非常具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • thinkphp瀏覽歷史功能實(shí)現(xiàn)方法

    thinkphp瀏覽歷史功能實(shí)現(xiàn)方法

    這篇文章主要介紹了thinkphp瀏覽歷史功能實(shí)現(xiàn)方法,可實(shí)現(xiàn)瀏覽器的瀏覽歷史功能,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • php和數(shù)據(jù)庫結(jié)合的一個(gè)簡單的web實(shí)例 代碼分析 (php初學(xué)者)

    php和數(shù)據(jù)庫結(jié)合的一個(gè)簡單的web實(shí)例 代碼分析 (php初學(xué)者)

    這是一個(gè)基本的教程。沒有怪異的代碼,只是一些基礎(chǔ)?,F(xiàn)在有大量的教程是基于UNIX機(jī)器的,這個(gè)教程將集中在基于Windows平臺上。
    2011-07-07
  • PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總

    PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總

    一般情況下,很少會用php去執(zhí)行l(wèi)inux命令,不過特殊情況下,你也許會用到這些函數(shù)。以前我知道有二個(gè)函數(shù)可以執(zhí)行l(wèi)inux命令,一個(gè)是exec,一個(gè)是shell_exec,通過本文給大家介紹PHP執(zhí)行l(wèi)inux命令常用函數(shù)匯總,需要的朋友參考下
    2016-02-02
  • 通過源碼解析Laravel的依賴注入

    通過源碼解析Laravel的依賴注入

    這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評論

温州市| 阳东县| 鹿泉市| 乐业县| 鞍山市| 南皮县| 突泉县| 澄迈县| 湖南省| 英山县| 黑龙江省| 永顺县| 进贤县| 巴林右旗| 保山市| 古田县| 酒泉市| 华安县| 延庆县| 安丘市| 曲水县| 文安县| 南阳市| 阿拉善右旗| 濮阳县| 亳州市| 喀喇| 余江县| 武川县| 肃南| 满洲里市| 万载县| 育儿| 收藏| 南郑县| 旌德县| 津南区| 青阳县| 光泽县| 红桥区| 贵州省|