zoukankan      html  css  js  c++  java
  • (转载)【TP5.0】设置session有效时长+修改默认存储路径

     
    复制代码
     
    //查看默认session存储路径:print_r(session_save_path());
     
    	hinkphphelper.php

    if (!function_exists('session')) { /** * Session管理 * @param string|array $name session名称,如果为数组表示进行session设置 * @param mixed $value session值 * @param string $prefix 前缀 * @return mixed */ function session($name, $value = '', $prefix = null) { if (is_array($name)) { // 初始化 Session::init($name); } elseif (is_null($name)) { // 清除 Session::clear('' === $value ? null : $value); } elseif ('' === $value) { // 判断或获取 return 0 === strpos($name, '?') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix); } elseif (is_null($value)) { // 删除 return Session::delete($name, $prefix); } else { // 设置 return Session::set($name, $value, $prefix); } } }

    复制代码
    复制代码
    	hinkphplibrary	hinkSession.php


    /** * session设置 * @param string $name session名称 * @param mixed $value session值 * @param string|null $prefix 作用域(前缀) * @return void */ public static function set($name, $value = '', $prefix = null) { empty(self::$init) && self::boot(); $prefix = !is_null($prefix) ? $prefix : self::$prefix; if (strpos($name, '.')) { // 二维数组赋值 list($name1, $name2) = explode('.', $name); if ($prefix) { $_SESSION[$prefix][$name1][$name2] = $value; } else { $_SESSION[$name1][$name2] = $value; } } elseif ($prefix) { $_SESSION[$prefix][$name] = $value; } else { $_SESSION[$name] = $value; } }
    复制代码

    通过查看thinkphp5自带的代码发现没有设置session过期时间的地方。

      只是在 hinkphplibrary hinkSession.php有

            if (isset($config['expire'])) {
                ini_set('session.gc_maxlifetime', $config['expire']);
                ini_set('session.cookie_lifetime', $config['expire']);
            }

    设置过期时间。

    // ---------- 更新与 2019/01/23日 -------------//

    1、问题:本来我想设置session有效期1800秒即30分钟 失效的,可是实际使用TP3.2.0的时候发现,登录了几天用户竟然没有失效,一直都可以登录。

    1、回答:设置不成功问题:gc回收机制,是概率性的,默认1/100,这就解释了为什么测试时候,登录几天的用户session不失效。

    因为:session是基于cookie的,php.ini 默认cookie_lifetime=0,(这里的0有2个意思:分别是根据浏览器的设置不同,如果浏览器没有启用【浏览器关闭cookie即失效】即cookie永不失效,否则就是“浏览器关闭即cookie失效”),而gc_maxlifetime=24分钟,所以每次session_start之前

    服务器都会进行一次 gc操作,且每次回收垃圾的概率为1/100,这就是测试环境为什么不失效的根本原因。

    (正式环境用户量上来后,你就会发现默认的session配置24分钟必定失效)

    PHP官网session:  //php.net/manual/zh/session.configuration.php

    // ---------- 更新与 2019/01/23日 -------------//

    session.gc_maxlifetime:session的有效生存时间,过了这个时间session将进入销毁队列。

    session.cookie_lifetime:(这里的0有2个意思:分别是根据浏览器的设置不同,如果浏览器没有启用【浏览器关闭cookie即失效】即cookie永不失效,否则就是“浏览器关闭即cookie失效”)

    示例Google浏览器:

    只有在config.php文件里面设置全局session过期时间。

    // +----------------------------------------------------------------------
        // | 会话设置
        // +----------------------------------------------------------------------
        'session'                 => [
            'id'             => '',
            // SESSION_ID的提交变量,解决flash上传跨域
            'var_session_id' => '',
            // SESSION 前缀
            'prefix'         => 'cmf5',
            // 驱动方式 支持redis memcache memcached
            'type'           => '',
            // 是否自动开启 SESSION
            'auto_start'     => true,
            //是否使用cookie
            'use_cookies'    => true,
            //设置过期时间  单位秒
            'path'           => TEMP_PATH,//表示session保存在自己网站根目录中的runtime/temp/目录中
            'expire'         => 3600*24*3,       //设置该值后,请务必进行线上、本地缓存删除、ctrl+F5强制刷新浏览器
        ],
  • 相关阅读:
    手机端和电脑端左右分屏录制视频解决方法
    收藏 网站部署配置文章
    廖雪峰网站:学习python函数—递归函数(四)
    廖雪峰网站:学习python函数—函数参数(三)
    廖雪峰网站:学习python函数—定义函数(二)
    廖雪峰网站:学习python函数—调用函数(一)
    廖雪峰网站:学习python基础知识—循环(四)
    廖雪峰网站:学习python基础知识—判断(三)
    Java提高十七:TreeSet 深入分析
    Java提高十六:TreeMap深入分析
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/9434978.html
Copyright © 2011-2022 走看看