在发送回响应文本之前,我有一个用AJAX和后端的PHP实现的登录设置$_SESSION['guest']。然后,前端的javascript将我重定向到guest页面,该页面检查是否isset($_SESSION['guest']),但通常这会导致错误,我会被带到另一个页面(使用我的else分支)。
我想知道我是否检查得太早了,这就是isset($_SESSION['guest'])结果为false的原因。但在重定向到测试它的页面之前,我让它倒计时5秒,所以这是我不理解的。
在它发生几次之后(我注销并再次登录),它停止了失败,我不能让它失败,这显然没有帮助!我认为这可能是缓存/cookie问题,但我已经清除了所有这些问题,它仍然不会再次失败。
有什么想法吗?
//this is the login script snippet
if($rows == 1){
$_SESSION[$type] = $username; //$type is posted over as guest or client. this is valid right?
$_SESSION[$type.'_id'] = $result['id'];
echo $_SESSION['welcome'] = 'You have logged in successfully.';
}
<?php
//snippet from the guest page. session_start() is invoked within the included 'page_top.php'
include('page_top.php');
if(isset($_SESSION['guest'])){
if(isset($_GET['sect'])){
if($_GET['sect'] == 'photography'){
include('view_album.php');
}
else{
include('404.html');
}
}
else{
include('welcome.php');
}
}
else{
include('403.html'); //i get redirected here!
}
include('page_bottom.php');
?>
edit:我现在认为,当它失败时,会话变量就不会被设置,因为如果我重新加载我的guest页面,它每次都会导致403.html页面,所以这不是延迟,它就是没有被设置。
我认为在设置变量时不应该回显它?这对我来说毫无意义。
echo $_SESSION['welcome'] = 'You have logged in successfully.';
如果$type作为访客或客户发布,它不应该是$_SESSION[$_POST['type']];
吗还是在页面的其他地方将$type设置为POST变量?
您必须将其包含在页面顶部(在ANY HTML或空白区输出之前,以及在<?php之后):
session_start();
编辑:
我知道这是一个老帖子。但对于未来需要它的人来说,它就在这里!