【发布时间】:2011-09-02 21:53:34
【问题描述】:
我有一个使用 AJAX 实现的登录,并且后端的 PHP 在发回响应文本之前设置了 $_SESSION['guest']。然后前端的 javascript 将我重定向到访客页面,该页面检查是否 isset($_SESSION['guest']),但这通常会导致错误,并且我被带到另一个页面(使用我的 else 分支)。
我想知道是不是我检查得太早了,这就是 isset($_SESSION['guest']) 导致错误的原因。但是我在重定向到测试它的页面之前让它倒计时 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');
?>
编辑:我现在认为,当它失败时,会话变量没有被设置,因为如果我重新加载我的访客页面,它每次都会导致 403.html 页面,所以这不是延迟,它只是没有得到设置。
【问题讨论】:
-
不,我已经推断出,因为我在记录它 5 秒后给它,但它仍然不起作用,它一定不是每次都设置变量。而且我认为这不是缓存问题,因为这更有可能导致您返回时意外登录,但在我开始访问时总是无法登录
-
这可能是因为我使用 $type 设置会话变量的键,而不是直接使用字符串,例如 'client' 或 'guest'?
标签: php ajax session-variables