博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【PHP】对TP中session的理解
阅读量:5051 次
发布时间:2019-06-12

本文共 1732 字,大约阅读时间需要 5 分钟。

目前只看了以文件方式存储的seesion机制,缓存和数据库的搞懂之后再补上

1.session的生命周期设置

  config.php中session配置里可以设定session的生命周期  

1   'session'                => [ 2         'id'             => '', 3         // SESSION_ID的提交变量,解决flash上传跨域 4         'var_session_id' => '', 5         // SESSION 前缀 6         'prefix'         => 'think', 7         // 驱动方式 支持redis memcache memcached 8         'type'           => 'redis ', 9         // 是否自动开启 SESSION10         'auto_start'     => true,11 12         'expire'     => 20, // Sessions生命周期13 14         'table_name' => 'session', // 表名(不包含前缀)15 16         'db_config'  => '', //应用配置文件中配置的额外的数据库连接信息17     ],

  在/think/Seesion.php有:

1  if (isset($config['expire'])) {2             ini_set('session.gc_maxlifetime', $config['expire']);3             ini_set('session.cookie_lifetime', $config['expire']);4         }
expire设置

  可以看出是通过ini_set()修改了php.ini中的session.gc_maxlifetime(服务器上session有效期)和session.cookie_lifetime(客户端seesion有效期)来达到改变session生命周期

 

2.session的销毁 

  session的销毁有两种情况:(1) 过期, (2) 浏览器关闭(但是也有很多情况下浏览器关闭了session未被销毁,这些情况是需要避免的)(关闭浏览器至过期归于情况(1))

  那php是如何销毁session的呢?

  情况(1):每发送一次php请求,就有1/100的几率触发`session回收`机制,它会去tmp/tmp下检查所有的session最后修改时间,如果过期则删除该文件。

  情况(2):客户端会用cookie记录sessionId,服务器需要利用这个seesionId来匹配seesion数据。若不设置cookie的过期时间,默认情况下关闭浏览器cookie失效,这时候对应的session失效;若通过max-age设置了cookie的过期时间,则到达这个过期时间之后cookie才会被销毁。

 

3.为什么要先执行session_start()

  新建session之前执行session_start()是告诉服务器要种一个cookie以及准备好session文件;

  读取session之前执行session_start()是告诉服务器,赶紧根据session id把session文件反序列化。

  只有一个session函数可以在session_start()之前执行,session_name():读取或指定session名称(比如默认的就是”PHPSESSID”),这个当然要在session_start之前执行。

 

思考:

1.当关闭浏览器时,session未被销毁的原因可能有哪些?

2.这些情况的解决办法

 

如有不对,欢迎指正,本人小白...理解很有可能有偏差

 

参考:

 

转载于:https://www.cnblogs.com/Hed-geh0g/p/7323827.html

你可能感兴趣的文章
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>
Java注解
查看>>
web自己主动保存表单
查看>>
一个小的日常实践——高速Fibonacci数算法
查看>>
机器学些技法(9)--Decision Tree
查看>>
drf权限组件
查看>>
输入月份和日期,得出是今年第几天
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
Kubernetes 运维学习笔记
查看>>