關於PHP中Session檔案過多的問題及session檔案儲存位置,_PHP教程

來源:互聯網
上載者:User

關於PHP中Session檔案過多的問題及session檔案儲存位置,


PHP的預設機制:每一次php請求,會有1/100的機率(預設值)觸發“session回收”。如果“session回收”發生,那就會檢查/tmp/sess_*的檔案,如果最後的修改時間到現在超過了1440秒(gc_maxlifetime的值),就將其刪除,意味著這些session到期失效

一、session檔案是什麼

檔案一般為 /tmp/sessions/sess_4b1e384ad74619bd212e236e52a5a174If

username|s:9:"test";admin|s:1:"0";

二、session回收何時發生

預設情況下,每一次php請求,就會有1/100的機率發生回收,所以可能簡單的理解為“每100次php請求就有一次回收發生”。這個機率是通過以下參數控制的

#機率是gc_probability/gc_divisorsession.gc_probability = 1session.gc_divisor = 100 

假設這種情況gc_maxlifetime=120,如果某個session檔案最後修改時間是120秒之前,那麼在下一次回收(1/100的機率)發生前,這個session仍然是有效。

如果你的session使用session.save_path中使用別的地方儲存session,session回收機制有可能不會自動處理到期session檔案。這時需要定時手動(或者crontab)的刪除到期的session

三、設定session儲存目錄

使用php5-fpm的話, 修改/etc/php5/fpm/php.ini, 修改或添加下面一行:

session.save_path = 3;600:/tmp/sessions 

四、session清除指令碼

#!/bin/shfind /tmp/php-session -cmin +24 -name "sess_*" -and -size 0 -delete > /dev/null 2>&1find /tmp/php-session -cmin +1440 -name "sess_*" -delete > /dev/null 2>&1 

這裡的時間我們可以通過 session.gc_maxlifetime 來擷取,放到定時任務裡面即可(crontab)

其他方式

使用memcache 等 ,(session.save_handler = memcache)

使用cookie,但是cookie得加密

五、使用tmfs儲存session

1、將/tmp掛載為 tmpfs檔案系統

修改/etc/fstab,在最後一行添加如下內容:/tmp/sessions tmpfs defaults,size=5120m 0 0

mount -a  

2、建立session隱藏檔夾

php並不會自動去建立這些檔案夾,不過在源檔案中提供了一些建立檔案夾的指令碼。下面這個指令碼也好用,指令碼內容如下

#!/bin/shdir="0 1 2 3 4 5 6 7 8 9 a b c d e f"for levela in $dir;dofor levelb in $dir;dofor levelc in $dir;domkdir -p /tmp/sessions/$levela/$levelb/$levelc;donedone;donechown -R root:webgrp /tmp/sessions && chmod -R 1777 /tmp/sessions 

因為/tmp/sessions是用的記憶體,伺服器重啟後,裡面的所有檔案都會丟失,所以,需要把上面的指令碼加入到 /etc/rc.local中,並且要放在啟動php之前

3、將session儲存到不同的目錄中

php本身支援session的多級散列,在php.ini中,將 ;session.save_path = /tmp 改為

session.save_path = "3;/tmp/sessions 

4、session的回收

使用上面的指令碼即可

下面給大家說下php session 資料儲存在哪裡?

當然是在伺服器端,但不是儲存在記憶體中,而是儲存在檔案或資料庫中。

預設情況下,php.ini 中設定的 SESSION 儲存方式是 files(session.save_handler = files),即使用讀寫檔案的方式儲存 SESSION 資料,而 SESSION 檔案儲存的目錄由 session.save_path 指定,檔案名稱以 sess_ 為首碼,後跟 SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。檔案中的資料即是序列化之後的 SESSION 資料了。

如果訪問量大,可能產生的 SESSION 檔案會比較多,這時可以設定分級目錄進行 SESSION 檔案的儲存,效率會提高很多,設定方法為:session.save_path="N;/save_path",N 為分級的級數,save_path 為開始目錄。

當寫入 SESSION 資料的時候,PHP 會擷取到用戶端的 SESSION_ID,然後根據這個 SESSION ID 到指定的 SESSION 檔案儲存目錄中找到相應的 SESSION 檔案,不存在則建立之,最後將資料序列化之後寫入檔案。讀取 SESSION 資料是也是類似的操作流程,對讀出來的資料需要進行解序列化,產生相應的 SESSION 變數。

您可能感興趣的文章:

  • 關於session在PHP5的設定檔中的詳細設定參數說明
  • php中如何同時使用session和cookie來儲存使用者登入資訊
  • PHP實現利用MySQL儲存session的方法
  • PHP中使用Session配合Javascript實現檔案上傳進度條功能
  • php自定檔案儲存session的方法
  • PHP session檔案獨佔鎖引起阻塞問題解決方案
  • php使用Session和檔案統計線上人數

http://www.bkjia.com/PHPjc/1111335.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111335.htmlTechArticle關於PHP中Session檔案過多的問題及session檔案儲存位置, PHP的預設機制:每一次php請求,會有1/100的機率(預設值)觸發“session回收”。如果...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.