• 【TP3.2.*】解决session过期不失效 和 设置不成功问题


    // ---------- 更新与 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日 -------------//

    2、手动设置session过期时间,比如7天,15天或者一个月:

      2.1 在config.php中设置SESSION_OPTIONS数组

    /* SESSION全局配置 */
        'SESSION_OPTIONS' => array(
            'path' => RUNTIME_PATH . 'Temp/',
            'use_cookies' => 1,         //是否在客户端用 cookie 来存放会话 ID,1是开启
            'use_trans_sid' => true,    //跨页传递
            'expire' => 3600*24*7,
        ),

    (特别注意:如果你想session在指定时间必定失效,再执行下面的操作:意思是 修改cookie的有效期,从0永不失效变成指定expire值时必定失效) 

    2.2 在ThinkPHP/common/functions.php中1074修改(或全局搜索【gc_maxlifetime】):

      将 

    if(isset($name['expire']))          ini_set('session.gc_maxlifetime', $name['expire']);

      修改成:

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

      保存,清除浏览器和服务器RunTime/Temp 下缓存,再次登录页面,等待过期即可。(测试时候可以设置expire=10)

  • 相关阅读:
    Spring2.5.6学习笔记DI的两种注入方式
    hsqldb2.2.9文档学习笔记之使用hsqldb
    Spring2.5.6学习笔记实例化bean的几种方法
    eclipse4.2插件开发之Hello!EclipsePlugin
    spring boot redis 多数据源配置 spring boot data redis
    docker安装mysql
    docker安装rabbitmq
    docker命令积累
    mysql8 免安装版 下载安装
    docker安装nginx
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/8970462.html
Copyright © 2020-2023  润新知