2013-04-06 28 views
4

我试图理解会议,以及如何结束它们的一些功能工作。 我去过不同的网站/甚至在这里SO和........基本上,没有任何工作。PHP结束会话(不同的方式)我不明白

我有一个应用程序我尝试上工作,当用户登录,我的用户名存储像这样 (不会粘贴整个代码,但你的想法)

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开发工具,我看到它产生这样我就要说“其工作”到目前为止, 。

现在,当我想注销时,长话短说,我有一个注销链接,将它们带到一个应该清除所有会话数据并将其重定向到登录页面的页面。当即时通讯测试应用程序,我点击注销链接,我被重定向到登录页面,但是当我回去并点击“索引页面”链接。它让我权利。

在注销文件,试图FORCE问题在矫枉过正大声笑,我有这个,似乎没有任何工作。

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等,并导航到索引页,然后锁定我。

正如你在上面看到的,我尝试过多种事情,最后我把它们扔在一起,应该做些什么.....我的问题是...因为我放入所有这些函数来尝试删除/一般情况下取消/取消会议...我还能做什么?我有点失去了它应该如何工作。

有人可以引导我在正确的方向吗?

感谢先进。

+3

有你'在session_start()'之前这种破坏性的代码? – 2013-04-06 20:19:45

+3

你应该**从不**保存会话中的用户密码!毕竟,唯一可能需要的是用户名和/或ID来检查用户是否已登录 – thaJeztah 2013-04-06 20:23:17

+0

是否谨慎使得在每个页面中还要检查数据库,如果细节匹配或是一次够了?并感谢提示@ thaJeztah – somdow 2013-04-06 20:25:27

回答

2

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

+0

你知道在所有的地方我曾经去过,从未见过,甚至认为我不得不手动开始会话,然后摧毁它...我认为它总是积极的....但是,谢谢这个工作。 (叹气)大声笑。 – somdow 2013-04-06 20:23:23

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();