PHP结束会话(不同的方式)我不明白


PHP ending sessions(different ways) i dont understand

我试图了解会话以及如何结束它们的一些功能。我去了不同的网站,甚至在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;
}

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

现在,当我想登出,长话短说,我有一个注销链接,把他们到一个页面,应该清除所有会话数据,并重定向到登录页面。当我测试应用程序,我点击注销链接,我得到重定向到登录页面,但当我回去,点击"索引页"链接。它让我直接进入。

在注销文件中,试图FORCE的问题在overkill 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等,然后导航到索引页,那么它会锁定我。

正如你在上面看到的,我尝试了很多东西,最后,我把它们放在一起,应该有所作为。我的问题是,因为我已经把所有这些功能尝试和删除/取消设置/删除一般会话,我还能做什么?我有点搞不懂它是怎么工作的。

有人能给我指个方向吗?

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

必须先启动会话才能结束会话。我建议你看一看……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();