Maison > développement back-end > tutoriel php > 关于php session 有效期 的一点疑问

关于php session 有效期 的一点疑问

WBOY
Libérer: 2016-09-15 11:30:58
original
1022 Les gens l'ont consulté

php.ini 设置默认的 session.gc_maxlifetime 值为1440,我该怎么理解这个值。

当我访问需要登录的网站的时候,一般情况下一直在操作的话登录时不会失效的,当达到一段时间没有操作,那么就需要重新登录了。我看了下网上的一些资料,了解了session的保存方式和回收机制,但还是有个问题理解的不是很清楚。

先不考虑这个回收机制可能造成的问题,也不考虑cookie(假设cookie是一直有效的)。

假设session.gc_maxlifetime设置的就是这个默认值 1440,我第一次登录的时候操作了session,保存了用户信息,之后就没有改变过session。

  • 是不是之后我不管发起了多少次请求,这个session的修改时间依旧是我登录的时间?

  • 是不是超过1440秒之后session就失效了,不管我有没有在这个网站操作?

  • 还是说我一直在这个网站操作,session 的修改时间会更新,也就是说只有超过1440秒不在这个网站活动session才会删除?

  • 还是session不是根据修改时间来删除的,只有在超过一定的时间不活跃之后才会删除?

希望的到一份详细一点的回答,谢谢!

回复内容:

php.ini 设置默认的 session.gc_maxlifetime 值为1440,我该怎么理解这个值。

当我访问需要登录的网站的时候,一般情况下一直在操作的话登录时不会失效的,当达到一段时间没有操作,那么就需要重新登录了。我看了下网上的一些资料,了解了session的保存方式和回收机制,但还是有个问题理解的不是很清楚。

先不考虑这个回收机制可能造成的问题,也不考虑cookie(假设cookie是一直有效的)。

假设session.gc_maxlifetime设置的就是这个默认值 1440,我第一次登录的时候操作了session,保存了用户信息,之后就没有改变过session。

  • 是不是之后我不管发起了多少次请求,这个session的修改时间依旧是我登录的时间?

  • 是不是超过1440秒之后session就失效了,不管我有没有在这个网站操作?

  • 还是说我一直在这个网站操作,session 的修改时间会更新,也就是说只有超过1440秒不在这个网站活动session才会删除?

  • 还是session不是根据修改时间来删除的,只有在超过一定的时间不活跃之后才会删除?

希望的到一份详细一点的回答,谢谢!

SESSION的回收是在每次访问页面的时候进行:

回收的机率 = session.gc_probability/session.gc_divisor,默认是1/1000.如果设置为1,则每次超过了SESSION的生存周期(session.gc_maxlifetime,默认是1440秒也就是24分钟)去访问的话,SESSION一定会被回收. 客户端每访问一次SESSION中的变量,SESSION文件的访问时间就会进行更新. 每次访问都是根据客户端存储的PHPSESSID这个cookie去请求服务器中存储的唯一的SESSION. 当客户端的cookie过期后,就无法知道要访问的是哪一个SESSION,尽管此时服务器上的SESSION文件还没有被过期收回,这样就会造成服务器资源的浪费. 如果用户通过点击"退出"按钮退出系统,这时程序可以注销掉cookie和session. 如果用户没有通知系统就关闭浏览器退出,sess_PHPSESSID文件则只能依赖手动回收.

PHP的session采用被动的回收机制,过期的session文件不会自己消失,而是通过请求触发"回收"来处理过期的session.
这时可以定时任务(crontab)自动删除过期的session:
找出24分钟前的文件并删除:
find /path/to/sessions -cmin +24 -type f | xargs rm

这个值是距离你最后一次刷新页面的时间,也就是你刷新完页面后24分钟未做任何操作,服务端就会把session删除掉。但是,是否会删除又和在php.ini中设置的删除命中率有关,如session.gc_divisor=1000,session.gc_probability=1,就表示每一千个用户调用session_start()的时候,就百分百的会执行一次垃圾回收机制,将磁盘上没用的session文件删除。而这个删除又不确定是哪个用户的session文件。所以,session是会话技术,就当成与浏览器是否关闭重写打开放在一起理解就好。就是,我只要关闭浏览器了,这次会话就断了,那个session自然失效。。。。个人浅显理解,如有错误希望有大神指正?

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal