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

需求:

程序中需要自定义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过期时间方法)