【发布时间】:2011-12-21 17:20:51
【问题描述】:
作为背景,这是我的场景:
我正在为特定的利基构建一个自托管平台,该平台的一部分是登录过程,如果经过验证,它将为用户设置一个会话。每次加载管理页面时,都会启动会话并检查变量 $_SESSION['key'] 是否为真。
如果为假,用户将被重定向到登录页面,并显示错误提示他们再次登录。
问题在于,这取决于是否设置了会话 cookie,即当会话 cookie 过期并且会话以 session_start() 启动以检查 $_SESSION['key'] 时,因此创建一个新的会话 cookie默认值(我使用session_set_cookie_params() 更改路径、超时等)使得无法重新登录,因为会话 cookie 不会覆盖我所看到的内容。
为了解决这个问题,我考虑在检查$_SESSION['key'] 时在session_start() 之前使用session_set_cookie_params(5, ..) 之类的东西,这将创建一个5 秒的会话cookie,因此允许在重新登录时创建一个新的cookie中,但我不确定这是否可行 - 而且我也确信必须有一种更有效的方法来设置/取消设置会话变量?
这是我的代码:
如果登录成功则开始会话
if($validated){
session_set_cookie_params(1800, "/inst", $server_name['home']);
session_name("_inst");
session_start();
$_SESSION['key'] = true;
}
检查 $_SESSION['key'] 是否仍然为真
session_name("_inst");
session_start();
if(!$_SESSION['key']) {
header('Location: ' . $server['home'] . '/login/?error=1');
}
任何答案或建议都会很棒,如果您需要澄清任何事情,请询问!
【问题讨论】:
标签: php session cookies session-variables