2011-04-28 213 views
2

我试图测试一个简单的登录系统没有数据库,仅用于测试目的。 我创建了一个php文件,用于检查用户名和密码是否有效并注册会话。PHP会话登录系统

<?php 
session_start(); 
define("ADMINUSER", "user"); 
define("ADMINPASSWORD", "pass"); 
$user = $_POST['user']; 
$pass = $_POST['pass']; 
if (($user==ADMINUSER) && ($pass==ADMINPASSWORD)) 
{ 
    $_SESSION['logged_in'] = true; 
    header("Location: main.php"); 
} 
else 
{ 
    header("Location: auth.php?flag=wrong"); 
} 
?> 

,包括这其他文件,以检查用户是否登录:

<? session_start(); 
if ($_SESSION['logged_in'] != true) 
{ 
    header("Location: auth.php?flag=not"); 
    exit; 
} 
?> 

但这似乎并没有工作,因为我关闭该窗口,并尝试再次打开它,它不会将我重定向到登录页面(auth.php)。

我在做什么错?任何帮助表示赞赏。

+0

您必须彻底退出浏览器和/或清除cookie,而不是关闭一个窗口。 – 2011-04-28 18:03:09

+0

在访问$ _SESSION之前,至少你没有在你的其他文件中使用'session_start()'。 – initall 2011-04-28 18:05:54

+0

第一个标题重定向是否工作?大多数客户端需要绝对URI的位置,即标题(“位置:http://www.example.com/main.php”) – 2011-04-28 18:31:05

回答

0

它不会将您重定向到auth.php页面,因为您的会话持续存在,直到您清除浏览器的Cookie或直到会话用完为止。因此,为什么关闭浏览器窗口不会使您退出的Facebook/Twitter的等

+0

什么是正确的方法来检查用户是否登录,并没有适当的凭据访问页面? – ProgrammingEnthusiast 2011-04-28 18:58:05

+0

我清除了我的Cookie并关闭了我的电脑,但仍然没有将页面重定向到登录表单。你确定脚本没有错吗? – ProgrammingEnthusiast 2011-04-29 15:32:01

6

你的这部分代码:


    $_SESSION['logged_in'] == true; 

应该是:


    $_SESSION['logged_in'] = true; 

=是赋值运算符。

==是一个比较运算符。

0

您应该总是使用头部函数重定向后使用退出,否则将继续加载页面。

header('Location: auth.php', true, 303); 
exit; 

这是一个很好的做法,指定的,而不是用默认的301重定向代码301只意味着代码303,“永久移动”,代码303的意思是“看其他”。