如何利用php設定一個嚴格控制到期時間的session

來源:互聯網
上載者:User

1.php session 有效期間

php的session有效期間預設是1440秒(24分鐘),如果用戶端超過24分鐘沒有重新整理,當前session會被回收,失效。
當使用者關閉瀏覽器,會話結束,session也會失效。

可以修改php.ini的session.gc_maxlifetime來設定session的生命週期,但並不能保證在超過這一時間後session資訊立即會刪除。因為GC是按機率啟動的,可能在某一個長時間內都沒有被啟動。那麼大量的session在超過session.gc_maxlifetime後仍然有效。

2.session.gc_maxlifetime,session.gc_probability,session.gc_pisor說明

session.gc_maxlifetime = 30 表示當session檔案在30秒後沒有被訪問,則視為到期session,等待GC回收。

GC進程調用的機率是通過session.gc_probability/session.gc_pisor計算得來的,而session.gc_pisor預設是1000,
如果session.gc_probability = 1000,那麼GC進程在每次執行session_start()時都會調用,執行回收。

把session.gc_probability/session.gc_pisor的機率提高,會有協助,但會對效能造成嚴重影響。

3.嚴格控制session到期方法

1.使用memcache/redis來儲存session,設定到期時間,因為memcache/redis的回收機制不是按機率的,可以確保session到期後失效。

2.只使用php實現,建立一個session類,在session寫入時,把到期時間也寫入。讀取時,根據到期時間判斷是否已到期。

<?php/** * Session控制類 */class Session{    /**     * 設定session     * @param String $name   session name     * @param Mixed  $data   session data     * @param Int    $expire 逾時時間(秒)     */    public static function set($name, $data, $expire=600){        $session_data = array();        $session_data['data'] = $data;        $session_data['expire'] = time()+$expire;        $_SESSION[$name] = $session_data;    }    /**     * 讀取session     * @param  String $name  session name     * @return Mixed     */    public static function get($name){        if(isset($_SESSION[$name])){            if($_SESSION[$name]['expire']>time()){                return $_SESSION[$name]['data'];            }else{                self::clear($name);            }        }        return false;    }    /**     * 清除session     * @param  String  $name  session name     */    private static function clear($name){        unset($_SESSION[$name]);    }}?>

demo:

<?phpsession_start();$data = '123456';session::set('test', $data, 10);echo session::get('test'); // 未到期,輸出sleep(10);echo session::get('test'); // 已到期?>

本文講解了 如何利用php設定一個嚴格控制到期時間的session ,耕讀相關內容請關注php中文網。

相關推薦:

關於mysql 時間戳記格式化函數from_unixtime的使用說明

關於mysql函數concat與group_concat使用說明事項

關於mysql innodb啟動失敗無法重啟的處理方法講解

相關文章

聯繫我們

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