Создание переменной сеанса PHP вешает мой браузер - PullRequest
4 голосов
/ 17 февраля 2012

Я только недавно вышел из своей пещеры 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, где он не сможет загрузить любые файлы должным образом. Действие кнопки «Назад», похоже, ставит браузер в бесконечный цикл.

Что этот пещерный человек делает неправильно?

Спасибо

Брайан.

1 Ответ

2 голосов
/ 17 февраля 2012

Я просто делаю здесь предположение.

Вам нужно иметь exit(); после заголовка вашего местоположения.Если после вашего перенаправления будет выводиться больше данных (например, когда сеанс пытается установить cookie), произойдет сбой перенаправления.

Проведите тест и посмотрите, что произойдет.

Вы также можетепопробуйте session_write_close() после назначения сеанса, чтобы принудительно завершить все относящиеся к сеансу данные перед попыткой перенаправления.Я все еще очень рекомендую exit();, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...