如何将会话到期与cookie过期联系起来?

时间:2013-02-22 16:02:52

标签: php apache session-cookies

在PHP中,如何在会话存在的时候创建一个持续时间的cookie?

方案: 网站由页面组成,有些是执行的PHP脚本,例如loginview cart。一些是Apache从缓存中读取的静态html文件,并且不会在这些页面上调用PHP。

在运行PHP的任何页面上生成并维护sessionID。无论用户是否实际登录,会话都存在。会话存储用户是否登录。浏览器只有一个sessionID cookie。

缓存页面应显示log inlog out按钮,具体取决于用户是否已登录。在缓存页面上不调用PHP,因此无法在此处读取会话值。必须使用一个小的JavaScript函数来检查IsLoggedIn cookie。

问题: 如果用户登录,PHP可以设置JavaScript读取的cookie。好。如果用户使用注销按钮明确注销,则cookie可能已过期。好。

但是 - 如果用户离开计算机,他的会话将在上次与PHP驱动页面交互后的x秒内到期,而他的cookie将在创建时间后的几秒钟内到期。这可能导致一个超时前一个。

有没有办法同步这两个,以便它们总是一起到期?

1 个答案:

答案 0 :(得分:0)

您可以将会话存储在数据库中,以便您可以更好地控制它们,并使用ajax set在一个时间间隔内进行检查。这会使它变得更容易,现在你不需要cookie。虽然如果你想要一个“记住我”功能,你可以使用存储在cookie中的unuiqe标识符setcookie("nameofcookie", "unuiq md5 value maybe", time()*3600));

但是如果您在数据库中控制会话,您还可以控制会话长度,所有逻辑都可以在php中。

您也可以执行此操作PHP Session timeout

这就是我这样做的方式。