4

我正在尝试了解会话以及结束它们的某些功能如何工作。我去过不同的网站/甚至在这里,基本上,没有任何工作。

我有一个我正在尝试使用的应用程序,当用户登录时,我像这样存储用户名(不打算粘贴整个代码,但你明白了)

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;
}

它让他们进来。我检查了 Firefox 网络开发工具中的 cookie,我看到它正在生成,所以到目前为止我要说“它正在工作”。

现在,当我想注销时,长话短说,我有一个注销链接,可以将他们带到一个页面,该页面应该清除所有会话数据并将它们重定向到登录页面。当我测试应用程序并单击注销链接时,我被重定向到登录页面,但是当我返回并单击“索引页面”链接时。它让我直接进去。

在注销文件中,试图以矫枉过正的方式强制解决问题大声笑,我有这个,但似乎没有任何效果。

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 等,然后导航到索引页面,那么它会将我锁定在外面。

正如您在上面看到的,我尝试了多种方法,最后,我将它们全部放在一起,这应该做点什么。我的问题是,既然我已经投入了所有这些功能来尝试删除/取消设置/删除一般会话,我还能做什么?我对它应该如何工作感到有点迷茫。

有人可以引导我朝着正确的方向前进吗?

4

2 回答 2

2

session_start()您在注销页面的顶部缺少一个。它试图修改一个不存在的会话!

于 2013-04-06T20:20:43.673 回答
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(); 
于 2013-04-06T20:31:14.647 回答