在PHP中,如何在会话存在的时候创建一个持续时间的cookie?
方案:
网站由页面组成,有些是执行的PHP脚本,例如login
和view cart
。一些是Apache从缓存中读取的静态html文件,并且不会在这些页面上调用PHP。
在运行PHP的任何页面上生成并维护sessionID。无论用户是否实际登录,会话都存在。会话存储用户是否登录。浏览器只有一个sessionID cookie。
缓存页面应显示log in
或log out
按钮,具体取决于用户是否已登录。在缓存页面上不调用PHP,因此无法在此处读取会话值。必须使用一个小的JavaScript函数来检查IsLoggedIn cookie。
问题: 如果用户登录,PHP可以设置JavaScript读取的cookie。好。如果用户使用注销按钮明确注销,则cookie可能已过期。好。
但是 - 如果用户离开计算机,他的会话将在上次与PHP驱动页面交互后的x秒内到期,而他的cookie将在创建时间后的几秒钟内到期。这可能导致一个超时前一个。
有没有办法同步这两个,以便它们总是一起到期?
答案 0 :(得分:0)
您可以将会话存储在数据库中,以便您可以更好地控制它们,并使用ajax set在一个时间间隔内进行检查。这会使它变得更容易,现在你不需要cookie。虽然如果你想要一个“记住我”功能,你可以使用存储在cookie中的unuiqe标识符setcookie("nameofcookie", "unuiq md5 value maybe", time()*3600));
但是如果您在数据库中控制会话,您还可以控制会话长度,所有逻辑都可以在php中。
您也可以执行此操作PHP Session timeout
这就是我这样做的方式。