我最近才从我的ASP洞穴中出现,并且无法适应PHP的阳光。
我目前的问题在于一个简单的登录序列,我在其中创建了一个会话变量 - 该步骤导致我的浏览器挂起然后行为不正常。
从我的登录页面(A.php),登录表单被定向到B.php(下面),它处理密码,创建会话变量,然后将用户重定向到另一个文件(C.php)。
为简洁起见,我只是假设登录成功。 B.php包含以下内容:
<?php
session_start();
require "../scripts/base/toolbox.php";
fnProcessLogin();
function fnProcessLogin(){
$passwd = strtoupper($_POST["passwd"]);
if (strlen($passwd)==0)
{
$passwd=strtoupper($_SESSION['plpassword']);
unset($_SESSION['plpassword']);
}
try{
$db = Database::getDB();
$sql="SELECT securitylevel, staffID, staffname, stafflname, staffemail, iRoleID FROM staff WHERE staffpasswd=?;";
$data = array($passwd);
$query = $db->prepare($sql);
$query->execute($data);
if($query->rowCount()>0){
$row = $query->fetch();
$a=$passwd."|".$row['staffID']."|".$row['staffname']."|".$row['stafflname']."|".$row['staffemail']."|".$row['iRoleID'];
$_SESSION['admin'] = $a;
header('Location: C.php');
}
}
catch(PDOException $pe){
echo "We are sorry, but we cannot complete this database operation.";
file_put_contents('PDOerrors.txt',$pe->getMessage(),FILE_APPEND);
}
}
?>
如果我注释掉“$ _SESSION ['admin'] = $ a;”换行,重定向工作正常,但是一旦我尝试创建该会话变量,我的浏览器就会挂起,直到最终转到C.php,它无法正确加载任何文件。后退按钮操作似乎将浏览器置于无限循环中。
这个穴居人做错了什么?
谢谢,
布赖恩。
答案 0 :(得分:2)
我只是在这里猜测。
您的位置标题后需要exit();
。如果在重定向后输出更多数据(例如,尝试设置cookie的会话),重定向将失败。
给它一个测试,看看会发生什么。
您还可以在会话分配后尝试session_write_close()
,以在尝试重定向之前强制完成与会话相关的所有数据。我仍然强烈推荐exit();
。