美文网首页测试开发
php_灵活配置session过期时间方法

php_灵活配置session过期时间方法

作者: 古佛青灯度流年 | 来源:发表于2017-09-01 12:55 被阅读134次

    需求:

    程序中需要自定义session的过期时间,例如:今天想要session过期时间为:10天后,下一个阶段又想要过期时间为:3个月后,那这种需求你总不能每次都去修改php.ini解决吧,那么有没有一劳永逸,而且又很简单的方法呢?当然有了,且看我怎么投机取巧的。

    实现:

    第一步

    • php.ini中设置以下三行内容:
    修改三行如下:
    1、session.use_cookies=1
    #把这个的值设置为1,利用cookie来传递sessionid
    
    2、session.cookie_lifetime=99999999
    #这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……
    就是因为这个所以PHP的session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。
    
    3、session.gc_maxlifetime=99999999
    #这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
     那么我们也把它设置为99999999。当然也可以了~
    

    第二步

    • 代码中做相应修改,特意奉上session控制类,大致的思想是:每次进行session设置的时候,都会将每个字段组装成一个数组,其中包括一个过期时间字段;这样在每次查找指定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
         */
        public static function clear($name){
            unset($_SESSION[$name]);
        }
    
    }
    ?>
    

    第三步

    使用实例:

    require_once(__DIR__."/./session.php");
    #存id:
    session::set('userid',$uid,$lifeTime);
    #取id
    $userid = session::get('userid');
    

    总结:

    这样设计就再也不用担心服务端session过期时间及客户端cookie过期时间了;完全受你控制,是不是很方便呢?
    @晴天-2017-09-01 12:53:50

    相关文章

      网友评论

        本文标题:php_灵活配置session过期时间方法

        本文链接:https://www.haomeiwen.com/subject/vqnhjxtx.html