创建PHP会话变量会挂起我的浏览器

创建PHP会话变量会挂起我的浏览器,php,session,variables,Php,Session,Variables,我只是最近才从我的ASP洞穴出来,我很难适应PHP的阳光 我目前的问题在于一个简单的登录序列,在这个序列中我创建了一个会话变量——这一步会导致我的浏览器挂起,然后不稳定地运行 从我的登录页面(A.php),登录表单被定向到B.php(下面),B.php处理密码,创建会话变量,然后将用户重定向到另一个文件(C.php) 简而言之,我只是假设登录成功。B.php包含以下内容: <?php session_start(); require "../scripts/base/toolbox.php

我只是最近才从我的ASP洞穴出来,我很难适应PHP的阳光

我目前的问题在于一个简单的登录序列,在这个序列中我创建了一个会话变量——这一步会导致我的浏览器挂起,然后不稳定地运行

从我的登录页面(A.php),登录表单被定向到B.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);
  }
} 

?>

如果我注释掉“$\u SESSION['admin']=$a;”行,重定向工作正常,但只要我尝试创建该会话变量,我的浏览器就会挂起,直到最终转到C.php,它无法正确加载任何文件。后退按钮动作似乎将浏览器置于一个无休止的循环中

这个穴居人做错了什么

谢谢


布莱恩。

我只是在猜测

您需要有一个
exit()在位置标题之后。如果重定向后输出了更多数据(例如,会话试图设置cookie),则重定向将失败

测试一下,看看会发生什么


您还可以在会话分配之后尝试
会话\u write\u close()
,以强制完成所有会话相关数据,然后再尝试重定向。我仍然强烈推荐
exit()尽管如此。

为什么要将密码设置为大写?还是我读错了?还有:你真的需要在会话中存储密码吗?为什么不为用户数据使用多维数组来添加
$\u会话
,而使用字符串(由
分隔)来无限重定向?浏览器是否可能在从B页到C页再返回B页之间被重定向?C页做什么?它是否也包含
位置
标题?是否使用?谢谢,但这两个选项都没有任何区别。我还更改了指向此页面的重定向(以防C.php出现问题)。重定向很好,但是如果我返回到B.php,系统会花费很长时间连接到页面,然后不会读取任何包含文件,页面上会充满php错误通知。莫名其妙@用户1216097:如果对这些事情有疑问,我通常会去
tcpdump