如何用PHP严格设置一个30分钟过期的session

时间:2017-05-22作者:klpeng分类:PHP浏览:2611评论:0

有人肯定会说了,php.ini里面设置session.gc_maxlifetime

如题:严格二字:

PHP是用一定的概率来运行session的gc的, 也就是session.gc_probability和session.gc_divisor, 这个默认的值分别是1和100, 也就是有1%的机会, PHP会在一个Session启动时, 运行Session gc. 不能保证到30分钟的时候一定会过期.

正确的做法是这样:

  1. 设置Cookie过期时间session.cookie_lifetime为30分钟;

  2. 设置Session存活周期session.gc_maxlifetime为30分钟;

  3. 自己为每一个Session值增加Time stamp;

  4. 每次访问之前, 判断时间戳;

下面提供一下简单代码:

/**
 * Session严格控制
 */
ini_set('session.gc_maxlifetime', 1800); // 秒
ini_set('session.cookie_lifetime', 1800); // 秒   

class Session {

    /**
     * 设置session 
     * @param String $name   session name 
     * @param Mixed  $data   session data 
     * @param Int    $expire 超时时间(秒) 
     */
    public static function set($name, $data, $expire = 1800) {
        $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]);
    }

}



打赏
文章版权声明:除非注明,否则均为彭超的博客原创文章,转载或复制请以超链接形式并注明出处。
相关推荐

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

猜你喜欢