//查看默认session存储路径:print_r(session_save_path());
 
\thinkphp\helper.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);
}
}
}
\thinkphp\library\think\Session.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过期时间的地方。

  只是在\thinkphp\library\think\Session.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强制刷新浏览器
],

(转载)【TP5.0】设置session有效时长+修改默认存储路径的更多相关文章

  1. IT兄弟连 JavaWeb教程 Servlet会话跟踪 设置Session存活时长

    方式一:修改所有的session默认时长,修改tomcat目录下的conf文件夹下的web.xml文件. <session-config> <session-timeout>希 ...

  2. XamarinAndroid组件教程设置动画的时长参数

    XamarinAndroid组件教程设置动画的时长参数 在添加动画的时候,开发者还可以动画参数进行设置,如动画持续的时长.插值器等.下面依次讲解动画参数的设置方法. 1.设置动画时长 设置动画持续的时 ...

  3. CentOS7.X yum安装MySQL8.0 数据表不区分大小写切换默认存储路径

    查看当前系统版本的详细信息 # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) yum源下载 地址:https://dev.m ...

  4. js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总

    在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要.   什么是Cookie 所谓Cookie,只是一条极为短小的信息, ...

  5. mysql8.0数据库忘记密码时进行修改方法

    最近安装mysql8.0数据库,用以前的修改mysql方法,没有成功,所以参考网上前辈的做法,自己重新整理了下忘记密码时进行修改方法 1.安装mysql8.0后发现,在安装目中,是没有my.ini 和 ...

  6. Android为TV端助力 关于4.0之后不能直接获取SD卡外部存储路径的问题

    Environment.getExternalStorageDirectory()是Android 2.x时代的产物,那时Android主流设备只有很小的内置存储器,然后都会外置一张sd卡,那时这个方 ...

  7. Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )

    最近在开发一个基于Vue的后台管理系统,其中使用了element-ui第三方ui组件库.使用过组件库的人都知道,第三方组件往往会有一些默认的样式,而有些又是我们想要改变的. 一.基础(了解 <s ...

  8. MyEclipse中设置开发项目时使用的默认JDK

    安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...

  9. maven 新建项目时修改默认jre路径

    新建maven项目时,JRE System Library默认为J2SE-1.5 如果想修改为1.7,修改maven的settings.xml ,在profiles中添加 <profile> ...

随机推荐

  1. c++ 如何编写接口类(interface)

    接口类简介: 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法. 用c++实现接口类时需要 ...

  2. go语言之进阶篇创建goroutine协程

    1.goroutine是什么 goroutine是Go并行设计的核心.goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现 ...

  3. HTML中的转义字符 (转)

    HTML中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用它们的转义序列,如下所示: & 或 & &a ...

  4. Intent 简介 结构 传递数据 常见Action 常量 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 如何在 Kaggle 首战中进入前 10%

    原文:https://dnc1994.com/2016/04/rank-10-percent-in-first-kaggle-competition/ Introduction Kaggle 是目前最 ...

  6. CHtmlEditCtrl(1) : Use CHtmlEditCtrl to Create a Simple HTML Editor

    I needed a lightweight HTML editor to generate "rich text" emails, so I decided to explore ...

  7. ZooKeeper启动报错 JAVA_HOME is incorrectly set

    解决办法:在zkEnv.cmd文件中直接写死调用的jdk路径 set JAVA_HOME="D:\Program Files\Java7\jdk1.7.0_51" if not e ...

  8. Material Design学习之 ProgreesBar

    转载奇怪注明出处:王亟亟的大牛之路 继续我们Material Design的内容,这一篇讲的是进度条,上一篇是Switch地址例如以下:http://blog.csdn.net/ddwhan0123/ ...

  9. yii源码二 -- interfaces

    path:framework/base/interfaces.php overview:This file contains core interfaces for Yii framework. in ...

  10. CAD块参照转实体

    经常,需要在CAD中插入块,比如图框,它的类型是INSERT,而不是Line和PolyLine.一般情况下,我们是不会去编辑它的,但有的时候需要选择它,比如在选择打印范围时,默认为过滤掉INSERT类 ...