php中session逾時嚴格控制執行個體_PHP教程

來源:互聯網
上載者:User
php中session預設是30分鐘逾時,但是有的時間壓根就沒到30分鐘就自動逾時了,這對很多操作帶來不便,下面我們來看看解決30分鐘逾時的辦法。

第一種回答

那麼, 最常見的一種回答是: 設定Session的到期時間, 也就是session.gc_maxlifetime, 這種回答是不正確的, 原因如下:

1. 首先, 這個PHP是用一定的機率來運行session的gc的, 也就是session.gc_probability和session.gc_divisor(介紹參看 深入理解PHP原理之Session Gc的一個小機率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. 每次訪問之前, 判斷時間戳記.

國外網站參考session.gc_maxlifetime

session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and potentially cleaned up. Garbage collection may occur during session start (depending on session.gc_probability and session.gc_divisor).
Note:

If different scripts have different values of session.gc_maxlifetime but share the same place for storing the session data then the script with the minimum value will be cleaning the data. In this case, use this directive together with session.save_path.


Note: If you are using the default file-based session handler, your filesystem must keep track of access times (atime). Windows FAT does not so you will have to come up with another way to handle garbage collecting your session if you are stuck with a FAT filesystem or any other filesystem where atime tracking is not available. Since PHP 4.2.3 it has used mtime (modified date) instead of atime. So, you won't have problems with filesystems where atime tracking is not available.

session.referer_check string
session.referer_check contains the substring you want to check each HTTP Referer for. If the Referer was sent by the client and the substring was not found, the embedded session id will be marked as invalid. Defaults to the empty string.
session.entropy_file string
session.entropy_file gives a path to an external resource (file) which will be used as an additional entropy source in the session id creation process. Examples are /dev/random or /dev/urandom which are available on many Unix systems. This feature is supported on Windows since PHP 5.3.3. Setting session.entropy_length to a non zero value will make PHP use the Windows Random API as entropy source.
session.entropy_length integer
session.entropy_length specifies the number of bytes which will be read from the file specified above. Defaults to 0 (disabled).
session.use_cookies boolean


PHP原理之Session Gc的一個小機率Notice

如果在ubuntu/Debian下, 採用apt安裝的PHP, 那麼在使用Session的時候, 就可能會有小機率遇到這個提示.

PHP Notice: session_start(): ps_files_cleanup_dir:

opendir(/var/lib/php5) failed: Permission denied (13)

in /home/laruence/www/htdocs/index.php on line 22< li>

這是因為, 在PHP中, 如果使用file_handler作為Session的save handler, 那麼就有機率在每次session_start的時候運行Session的Gc過程.

http://www.bkjia.com/PHPjc/632202.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632202.htmlTechArticlephp中session預設是30分鐘逾時,但是有的時間壓根就沒到30分鐘就自動逾時了,這對很多操作帶來不便,下面我們來看看解決30分鐘逾時的辦法...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.