2009-06-10 71 views
0

我正在实施一个登录系统,我相信你很多知道它是什么,我用会话来存储用户的ID,并检查它,如果他访问一个页面,需要用户登录。
但我的问题是,当用户点击注销锚点,没有任何反应,只要当前页面打开,我仍然可以访问其他页面。
这里是代码的使用:
注销是不是在一个登录系统的PHP工作

<? 
unset($_SESSION["ID"]); 
session_destroy(); 
header('location: ../Home/index.php'); 
?> 

所以任何人都可以提供帮助。提前致谢。

回答

6

你需要一个session_start()session_destroy()做。

如果你不这样做,PHP不知道你试图销毁哪个会话。

+0

+1我认为这是问题所在。 – Shoban 2009-06-10 17:39:01

2

但我的问题是,当用户点击 了注销锚,什么都不会发生

很多事情发生!

  1. 你们是不是要回去与以前的按钮,然后访问到您登录回到登录页面?

  2. 当用户尝试显示时,您是否真的在检查会话?

  3. 你确定你没有显示你的页面的缓存版本吗?

  4. 您是否检查过PHP会话文件是否被删除? (也许权限问题可能发生)

  5. 检查位置标头语法,RFC2616 14.30说:

位置响应头字段 用于接收者重定向至一个 位置等用于完成请求的请求-URI 或用于标识新资源的 。对于创建的响应,位置 是由请求创建的新资源 。对于3xx 响应,位置SHOULD 指示服务器的首选URI 用于自动重定向到 资源。该字段值由一个绝对URI组成,即 。

Location  = "Location" ":" absoluteURI 

尝试:

var_dump($_SESSION);

在每个页面的,看什么,真的发生。

+0

+1 - 好问题 – 2009-06-10 17:41:13

1

很可能你还必须删除会话cookie:

unset($_SESSION["ID"]); 
if (isset($_COOKIE[session_name()])) { 
    setcookie(session_name(), '', time()-42000, '/'); 
} 
session_destroy(); 
//... 
0

在退出页面应该像下面

<?php 
    session_start() 
    unset($_SESSION["ID"]); 
    session_destroy(); 
    header('Location: http://example.com/home'); 
?> 

而且在您想不登录限制其他网页用户。你需要在每页上写下面的代码:

<?php 
    session_start() 
    if(!isset($_SESSION["ID"]) || empty($_SESSION["ID"])) { 
     // redirect to login page 
     header('Location: http://example.com/login'); 
    } 
?>