如何(如果可能)设置和取消设置会话变量/停止会话cookie覆盖?

时间:2011-11-04 03:39:28

标签: php session cookies session-variables

对于背景,这是我的方案:

我正在为特定的利基构建一个自托管平台,该平台的一部分是登录过程,如果验证,则为用户设置会话。在每个管理页面加载时,会话启动并检查变量$_SESSION['key']以查看它是否为真。

如果为false,则会将用户重定向到登录页面,并显示错误,告知他们再次登录。

问题在于这取决于正在设置或未设置的会话cookie,因为会话cookie过期并且会话以session_start()启动以检查$_SESSION['key'],因此创建了具有默认值的新会话cookie(我使用session_set_cookie_params()来改变路径,超时等)使得无法重新登录,因为会话cookie不会从我看到的内容中覆盖。

为了解决这个问题,我在考虑session_set_cookie_params(5, ..)之前考虑使用session_start()之类的内容,这会创建一个5秒的会话cookie,因此允许新的在重新登录时创建,但我不确定这是否可行 - 我也确定必须有一种更有效的方法来设置/取消设置会话变量?

这是我的代码:

如果验证登录

,则启动会话
$_SESSION['key']

检查$ _SESSION ['key']是否仍为真

if($validated){
    session_set_cookie_params(1800, "/inst", $server_name['home']); 
    session_name("_inst");
    session_start();
    $_SESSION['key'] = true;
}

任何答案或建议都会很棒,请询问您是否需要澄清任何内容!

1 个答案:

答案 0 :(得分:2)

只需在所有页面上发出session_start()。这将无条件地为您创建一个会话,然后您可以检查密钥的存在/消除:

<?php

session_start();

if (!isset($_SESSSION['key'])) { // never logged in, or were logged in and got logged out
   ... redirect to login ...
   exit();
}

if ($_SESSION['key'] != 'expected value') { // logged in, but no longer a valid login.
   ... redirect to login ...
   exit();
}

你根本不应该搞乱会话cookie设置。将它们保留为默认值,只需检查相关的密钥即可。如果他们不在那里,那么用户就没有登录,应该被重定向。

如果他们的会话已经过期并且PHP清理了会话文件,那么他们已经被有效地注销,即使他们有一个非常有效的一点时间会话密钥,并且应该重定向再次登录。