2013-02-27 128 views
0

我有一个文件的login.php:

<?php 

session_start(); 

include('db.php'); 

      if(isset($_POST['email']) && !empty($_POST['email']) AND isset($_POST['password']) && !empty($_POST['password'])){ 
       $email = mysql_escape_string($_POST['email']); 
       $password = mysql_escape_string($_POST['password']); 

       $search = mysql_query("SELECT * FROM users WHERE email='".$email."' AND password='".$password."' AND active='1'") or die(mysql_error()); 
       $match = mysql_num_rows($search); 

       if($match > 0){ 
        $row = mysql_fetch_assoc($search); 
        $user=$row['forename'].' '.$row['surname']; 
        $_SESSION['username']=$user; 
        //$msg = 'Login Complete! Thanks, '.$user.'!'; 
        header('Location: page1.php') ; 
        die; 
       }else{ 
        $msg = 'Login Failed!<br /> Please make sure that you enter the correct details and that you have activated your account.'; 
       } 
      } 


?> 

现在,当我打开我page1.php中有问题。该文件包含此...

<?php 

session_start(); 

include('db.php'); 

if(isset($_SESSION['username'])){ 
    echo 'Success, '.$_SESSION['username'].'!'; 
}else{ 
    echo 'No dice!'; 
    //header('Location: login.php') ; 
} 

?> 

我最好希望它重定向到登录如果没有用户名存储。如果有,我想让他们查看。但是,我得到了“没有骰子!”每一次,所以它看起来像我没有正确检索(或存储)数据。我究竟做错了什么?


需要明确的是,在else不应该被解雇,因为它应该是指在index.php文件设置会话数据。重定向不是问题。


这个问题是特定于我的主机谁有一个奇怪的设置。联系他们时,他们向我提供了正确的路径信息,我必须使用session_save_path进行设置。在此基础上获得正确答案。

+0

$ search变量包含什么?或者它在哪里定义?在查询用户数据时包含更少的代码和平。 – ImadBakir 2013-02-27 15:28:45

+0

这是无关紧要的。该检查仅用于查看是否已设置,而不是如果它有值。你在'login.php'中开始会话吗? – BenM 2013-02-27 15:29:47

+0

我也在login.php中开始会话。我应该只在那里开始吗?再次开始是一件坏事? – Glenn 2013-02-27 15:32:23

回答

3

重定向格式不正确。您必须指定完整网址,如下所示:

header('Location: http://your.site.com/page1.php'); 
die; 

重定向后重要的是结束脚本。

如果会话数据未保留,可能是您有一些配置问题。验证您的php配置并检查存储会话数据的写权限。

<?php phpinfo();?> 
+1

不,你不要... – BenM 2013-02-27 15:28:14

+0

是的,你必须。 [链接](http://php.net/manual/en/function.header.php) [链接](http://www.faqs.org/rfcs/rfc2616.html) – Ghigo 2013-02-27 15:29:40

+0

http:// www .php.net/manual/en/function.header.php#85254 RFC不是标准。 – BenM 2013-02-27 15:32:00

1

我会评论这一点,但低于50限制意味着我不能出于某种原因。尝试

$row = mysql_fetch_assoc($search); 
$user=$row['forename'].' '.$row['surname']; 
echo 'User: '.$user.'<br />'; 

$_SESSION['username']=$user; 
echo 'Session: '.$_SESSION['username']; 

//header('Location: page1.php') ; 

并查看是否有任何内容实际存储在变量中。

编辑:试试这个

if($match > 0){ 
    $row = mysql_fetch_assoc($search); 
    $user=$row['forename'].' '.$row['surname']; 
    $_SESSION['username']=$user; 
    $_SESSION['logintrue'] = true; 
    //$msg = 'Login Complete! Thanks, '.$user.'!'; 
    header('Location: page1.php') ; 
    die; 
} 

session.php文件

<?php 
session_start(); 

if(!$_SESSION['logintrue']) 
{ 
header('Location: login.php') ; 
} 

$SessionUsername = $_SESSION['username']; 
?> 

page1.php中

<?php 

require_once 'session.php'; 
require_once 'db.php'; 

echo 'I work now maybe?<br />'; 
echo $SessionUsername; 
?> 

还包括没有功能这么写他们喜欢include 'db.php';我做那个错误也是。

+0

我放回注释行,修改为'$ msg ='登录完成!谢谢,'。$ _ SESSION ['username']。'!';'它会返回正确的信息。它似乎并没有坚持到新的页面。 – Glenn 2013-02-27 15:48:06

+0

尝试 'if(!empty($ _ SESSION ['username'])){ echo'Success,'。$ _ SESSION ['username']。'!'; } else { echo'No dice!'; // header('Location:login.php'); } ' – 2013-02-27 15:54:08

+0

一个很好的建议,但它返回相同的结果。做$ _SESSION ['用户名']的回声没有任何回报。 – Glenn 2013-02-27 16:08:41