Session 与 Session的GC

由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session 信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability 和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下, session.gc_probability=1, session.gc_divisor =100 也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).

GC 的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟) ,就将该session删除。你可以通过修改session.gc_maxlifetime参数来修改session的过期时间,修改完重启php-fpm与服务器,而且当访问量足够触发GC才能看到session过期时间。

Session永不过期

1.首先,保证存储在服务器的session永久存在:session.gc_maxlifetime设置为一个很大的值就不会被回收

2.session.use_cookies设置为1,用cookie来传递sessionid

3.session.cookie_lifetime,这个代表sessionid在客户端Cookie储存的时间,默认是0,代表浏览器一关闭sessionid就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧。

30天免密码登录实现

思路:
1、在用户登录成功时,创建session对象,保存用户信息
2、将此session的sessionid保存到cookie中
3、同时将sessionid于session对应关系存储到应用域中,以便后面可以根据sessionid来获取到session
4、在用户关闭浏览器,重新打开浏览器访问网站时,读取用户的cookie,得到sessionid
5、根据sessionid获取到第3步存储到应用域中的session对象
6、从session中读取用户信息

可以通过session在服务端的有效时间来控制,也可以通过sessionid在cookie中的有效时间来控制
OVER

负载均衡下session的存储

问题:同一个对话如果被分配到多个机器节点下,那么session将不能被访问到

解决方案:

1.会话保存:通过负载均衡哈希算法(ip或者uid)将一个用户的所有请求落在一个固定节点,那么session就可以被访问到

2.会话复制:将session文件用现有可行方案复制到集群所有节点下面,该方案不适合集群过大的情况

3.会话共享:将session文件存储在第三方共享资源上,比如redis等地方,所有请求取session都从一个地方取

最新文章

  1. React组件性能优化
  2. js this 闭包
  3. 天大 ACM 1090. City hall
  4. JavaIO(06)文件复制
  5. linux根目录下的文件夹
  6. mybatis字段名与类属性名不相同的冲突
  7. json_response的用法
  8. JavaScript的DOM编程--02--获取元素节点
  9. .net 模糊匹配路径
  10. [Swift]LeetCode157.用Read4来读取N个字符 $ Read N Characters Given Read4
  11. 关于pandas 调用mongodb出Memory error错误
  12. LeetCode 15. 3Sum 16. 3Sum Closest 18. 4Sum
  13. 微信小程序布局
  14. Spring IOC注入接口多实现解决
  15. 735. Asteroid Collision彗星相撞后的消失数组
  16. shell 变量相关的命令
  17. Codeforces Round #511 (Div. 2)
  18. [LeetCode&Python] Problem 806. Number of Lines To Write String
  19. 复习:使用HTML编写简单程序
  20. Git 学习(五)远程仓库

热门文章

  1. HDU 1535 S-Nim(SG函数)
  2. Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
  3. JSP自定义tag控件标签
  4. mysql初始化失败的问题
  5. SQLAlchemy Script
  6. 56、使用android studio(v1.3.*)修改包名 (rename package name)
  7. leetcode 【 Unique Paths 】python 实现
  8. 第1章 HTML基础
  9. HDU5726 GCD
  10. php+mysqli预处理技术实现添加、修改及删除多条数据的方法