在PHP中session默认是以文件的形式存储于服务器的

而客户端和服务端则是通过session_id来完成握手的,默认情况下PHP会将session_id存储于cookie中,用户每次请求时该session_id都会通过cookie传到服务器,下面是php.ini中的相关配置信息:

session.save_path="C:\xampp\tmp" 文件的存储路劲

session.use_cookies=1 是否使用cookie存取session_id

session.name=PHPSESSID 存储session_id的键名

session.use_only_cookies=0 是否只使用cookie来处理session_id

如何改变session的默认存储方式:

在php中我们可以通过使用session_set_save_handler函数才改变这种默认方式,该方法有两种形式的重载

php < 5.4 : 接受接受6个回调函数来执行session的管理SessionHandlerInterface

打开(open):接受两个参数:1,文件路劲;2,session_id

关闭(close)

读取(read):读取session信息,接受一个session_id作为参数

写入(write):将信息写入session,接受一个session_id作为参数

销毁(destroy):销毁一个session,接受一个session_id作为参数

回收(gc):当出发session回收时调用,接受一个session的过期时间(lifetime)作为参数

php>=5.4 session_set_save_handler可以接受一个SessionHandlerInterface的实例来设置session的存储方式

我们可以通过实现SessionHandlerInterface接口,或者重写SessionHandler类方法的实现,来编写自定义的session

下面说说session的回收机制

在php中session的回收时由session的回收频率和过期时间决定的,在php.ini中表现为

session.gc_probability=1

session.gc_divisor=100

session.gc_maxlifetime=1440

gc_maxlifetime很好理解,表示session的过期时间1440秒

gc_probability/gc_divisor 为session回收的频率,这个怎么理解呢,每次在我们调用session_start()的时候我们都有可能调用gc方法对过期的session进行回收,如上面设置所示,这里回收的概率为1/100,如果用户的每次请求我们都去回收过期session可能会对服务器造成压力,特别是请求特别多的时候,所以往往session的回收频率应该根据站点的访问量来调节

session_start细节

session_start首先会生成一个session_id,默认情况下会将这个ID写入一个会话cookie,之后会调用open,read方法,生成全局变量$_SESSION,之后做gc处理,所以如果我们的web应用只有一个会话,那么这个会话的信息是永远不会丢失的即使我们的会话已经过期。

最新文章

  1. Java实现多线程并发
  2. Grunt教程——初涉Grunt
  3. 转发:在开发机上绕过Chrome同源策略的办法
  4. EWOULDBLOCK = EAGAIN
  5. 【转】android 内存泄漏相关收藏博客。
  6. PI-安装SoapUI on Windows
  7. ionic 安装教程
  8. JVM中锁优化简介
  9. 部署Redis主-从
  10. find用法积累
  11. Python 学习笔记4
  12. Neutron网络性能测试与分析(一) CVR
  13. 推荐系统那点事 —— 基于Spark MLlib的特征选择
  14. MongoDB操作集
  15. Mybatis批量更新比较
  16. Nexus私服搭建
  17. shell脚本--编写CGI代码(shell结合html)以及环境变量
  18. vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址
  19. Delphi Excel导入 的通用程序转载
  20. 【HDU1693】Eat the Trees(插头dp)

热门文章

  1. Unity NGUI制作scroll view
  2. ikely()与unlikely() 都等同于if, 此处只是做编译优化
  3. CGI编程完全手册
  4. 【动态规划】【最短路】Codeforces 710E Generate a String
  5. boost------bind的使用(Boost程序库完全开发指南)读书笔记
  6. SQL Server不区分大小写的问题
  7. Directx 3D编程实例:绘制可变速旋转的三角形
  8. Error parsing XML: not well-formed (invalid token) 报错+R文件消失解决的方法
  9. DFU工作过程中USB机制
  10. java——递归调用