我正在尝试理解会话以及结束它们的一些功能如何工作。 我已经去了不同的地点/甚至在这里SO,基本上,没有任何工作。
我有一个我正在努力的应用程序,当用户登录时,我存储了这样的用户名 (不要粘贴整个代码,但你明白了)
if($row == 1){
session_start();
$_SESSION['usrname'] = $login_usrname;
$_SESSION['usrpass'] = $login_usrpass;
header("Location:index.php");
exit;
}
在所述应用程序的索引页面上,我有这样的支票
session_start();
if(!isset($_SESSION['usrname']) && !isset($_SESSION['usrpass'])){
header("Location:login-acc.php");
exit;
}
它让他们进来。我检查firefoxes web dev工具中的cookie,我看到它正在生成,所以我打算说“它的工作”到目前为止。
现在,当我想要注销时,长话短说我有一个注销链接,将它们带到一个页面,该页面应该清除所有会话数据并将它们重定向到登录页面。当我测试应用程序并单击注销链接时,我会被重定向到登录页面,但当我返回并单击“索引页面”链接时。它让我直接进入。
在注销文件中,尝试 FORCE 过度杀伤lol中的问题,我有这个并且似乎没有任何效果。
unset($_SESSION['usrname']);
unset($_SESSION['usrpass']);
session_unset();
$_SESSION = array();
session_destroy();
setcookie('PHPSESSID', '', time()-3600,'/', '', 0, 0);
header("Location:login-acc.php");
exit;
它将我重定向到登录页面,但是当我手动转到索引页面时,它让我直接进入。或者在被重定向到登录页面后,我点击“后退”按钮并让我也正好进入。
如果我然后进入FF Web开发人员工具应用程序并删除所有cookie等,并导航到索引页面,那么它会把我锁定。
正如你在上面所看到的,我尝试了多种方法,最后,我将它们全部扔在一起,应该做些什么。我的问题是,因为我已经放入了所有这些函数来尝试删除/取消/删除一般的会话,我还能做什么?关于它应该如何运作,我有点迷失。
有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:2)
您在退出页面顶部缺少session_start()
。它试图修改一个不存在的会话!
答案 1 :(得分:1)
您必须启动会话才能结束会话。我建议看看...... http://php.about.com/od/advancedphp/ss/php_sessions_3.htm
// you have to open the session to be able to modify or remove it
session_start();
// to change a variable, just overwrite it
$_SESSION['size']='large';
//you can remove a single variable in the session
unset($_SESSION['shape']);
// or this would remove all the variables in the session, but not the session itself
session_unset();
// this would destroy the session variables
session_destroy();