php Session gc機制下在window下與ununtu是不同的。

來源:互聯網
上載者:User
看到之前Mr_jing的session文章,受益匪淺。碰巧我也遇到了在win下session的問題。他在文章最後一個有意思的事提到了,當時我看到之後的感覺就是,太TMD(甜蜜的)緣分了。再然後我自己整了一篇比較水的日記我所理解的session_set_save_handler的執行順序機制,可還是不甘心,究竟看看linux下session到底行不行,(現在win下肯定是不行的)。

在win下測試session gc機制

  • 先說明環境-win下phpstudy
  • 2.php.ini配置

    3、代碼開始write.php寫入session,值為目前時間戳

      

    4、讀取session代碼

    ";echo 'gc_probability'.ini_get('session.gc_probability')."
    ";echo 'gc_divisor'.ini_get('session.gc_divisor')."
    ";session_start();echo ''.'Session::=>';var_dump($_SESSION);echo ''.'Cookie::=>';var_dump($_COOKIE);echo '';echo "
    ReadTime".date('Y-m-d H:i:s',time());

    5、執行read.php
    看到寫入時間為17:57:04

    6、讀取session,可以看到讀取session的值的(上面紅橢圓圈)時間和寫入時間都一樣,都是
    17:57:04,注意下面的readtime那一行是13:58:56,

    好的,截至到現在,win上都沒有問題。因為即使你的session的最大存留時間(session.gc_maxlifetime)為5秒,你的gc比例為1:1,就是百分百回收。
    但是注意:
    gc回收是從你的session_start開始,然後執行的是open,read,然後是gc。
    具體可以點這裡看關於session的執行順序。

    所以即使某個session已經到期,你去讀他,還是有值的,下一次就被gc掉了。
    (有些朋友可能會想,那第一次讀取有值,那判斷使用者登入與否就不準確了啊,但是真實生產環境,肯定不是單使用者,觸發session_start機制的情境很多,所以就不足為奇了。)

    那麼問題來了!!
    當我們不停的在win平台重新整理read.php這個頁面,session的值一直能拿到。這就奇怪了,應該被回收了啊。怎麼還能不停的拿到。理解中session gc是根據檔案的最後修改時間與目前時間和ini中設定的maxlifetime時間做對比,然後觸發回收機制。

    我們來張圖

    這就是奇葩所在
    1、如果把這個session刪除掉,然後在直接write,發現建立時間和剛剛刪除之前的建立時間一樣。名字相同咱可以理解,但是這個時間相同是腫麼回事!windows偷懶把資源回收筒給拿回來了?我把他清空了也是這樣。
    附上個gif圖(我是有多無聊~,請用ie瀏覽器開啟此圖,或者美圖秀秀,acdsee之類)

    在linux下session的gc

    我本地搭建的virtualbox (ubuntu下的lamp)
    配置如:

    然後在來個動態圖:顯示寫入session,然後查看session檔案的狀態,再然後讀取,第一次讀取,是有值的,而且兩次查看stat sess**檔案還在,我在重新整理一次之後,那麼值沒有了。也就驗證了session的流程是open read (gc) write close。請注意我第一次有值是之前開啟的,並不是讀取的write的值

    寫在最後:
    文章寫的有點毛糙,亂起八遭。
    最後感謝各位前輩的指點,尤其是cfc4nx。

    下次再寫清楚 點。。

  • 聯繫我們

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