2014-02-21 102 views
1

我正在登录页面,一切工作正常,但刷新安全页面或重定向到另一个页面变量消失。刷新/重定向后PHP会话变量丢失[解决]

登录:

<?php session_start(); 

//connection to database and other stuff 

if ($user == $dbuser && $pass == $dbpass) { 

    $_SESSION['user'] = $user; 
    $_SESSION['authenticated'] = "yes"; 
    $suser = $_SESSION['user']; //just to test if session works 

} 

?> 

安全页面:

<?php session_start(); ?> 

//small amount of html here 

<?php 
    $suser = $_SESSION['user']; 
    $sauth = $_SESSION['authenticated']; 

    if ($sauth != 'yes') { //not completed yet (needs user name check) 
     echo "<a href='./'>Log in</a> first!"; 
     require ('./login.php'); 
     die; 
    } else { 
    //not so important code here 
    } 
?> 

//rest of html here 

我没有发现任何错误,错误日志文件是干净的,所以必须是别的东西。重定向到保护页面后会话正常工作,但正如我前面所说的刷新页面或其他重定向清除会话变量。

页:http://nano.filiparag.com/admin/ 如果你想测试它只是要求用户名和密码

注:
现在我试着用setcookie()这样做的,也没有工作再次

编辑:
问题出在注销按钮。我为它制作了单独的PHP文件,现在一切正常。

+0

是否总是定义'$ dbuser'和'$ dbpass'?如果它们不是,那么'if'块将返回true,因为所有4个变量都可能是undefined/falsey。这会覆盖你的'$ _SESSION ['user']'和$ _SESSION ['authenticated']'值。 – jraede

+0

@jraede不要担心db *,因为它们总是被定义的 - 从数据库中拾取。 –

+0

你是正面的吗?从你的代码中,我可以看到唯一可以将这个人记录下来的代码。发布更多的代码可能会有所帮助,以及登录后如何将其重定向到安全页面的说明。 – jraede

回答

0

我想你可以尝试使用这种

登录:

<?php session_start(); 
ob_start(); 
//connection to database and other stuff 

if ($user == $dbuser && $pass == $dbpass) { 

    $_SESSION['user'] = $user; 
    $_SESSION['authenticated'] = "yes"; 
    $suser = $_SESSION['user']; //just to test if session works 

} 

?> 

安全页面:

<?php session_start(); 
    ob_start();?> 

//small amount of html here 
<?php session_start(); ob_start(); 
    $suser = $_SESSION['user']; 
    $sauth = $_SESSION['authenticated']; 

    if ($sauth != 'yes') { //not completed yet (needs user name check) 
     echo "<a href='./'>Log in</a> first!"; 
     require ('./login.php'); 
     die; 
    } else { 
    //not so important code here 
    } 
?> 

//rest of html here 
+0

还是一样。变量消失 –

0

即时猜测你login.php脚本是做与会话变量的东西时,你包括它。我可以看看你的login.php脚本,我会编辑我的答案,然后

+0

我已经找到了错误。无论如何,谢谢你的回答! –