PHP - Исправлена ​​проблема, когда сеансы вступают в силу только после обновления - PullRequest
2 голосов
/ 04 июля 2011

Пожалуйста, просмотрите это Stackoverflow сообщение.

У меня та же проблема с PHP, что и у bob_cobb. Вот ответ Брэда Крисита:

Порядок операций.

Поместите создание вашей сессии и Проверка на валидность в самом верхняя часть страницы, так что остальные страница может выносить суждения, отменяет существование $ _SESSION ['username']

(Скорее всего, вы пытаетесь проверить они внутри области содержимого, так что ваш «yay» или «ney» сообщение появляется в нужный раздел документа. Довольно, да, но вся верхняя половина страница не может видеть, что это [потенциально] допустимый сеанс.)

Он в основном говорит, что session_start () и условные выражения, которые проверяют переменные сеанса, должны быть наверху, чтобы остальная часть страницы могла действовать на основании этого.

Однако мой сеансовый чек равен вверху страницы.

<?php
session_start();

if ($_SESSION['username']) 
//User is already logged in, echo the log out button.
...    

else 
//User is not logged in, echo the log in form & button.
...    

//Login form validation if user is not logged in and submitted form.
//At the end, create session variable ($_SESSION['username'])

//Destroy session if user pressed log out button.
session_destroy();
?>

Все работает нормально, но, как и в случае с постером другого вопроса, мне нужно обновить страницу, чтобы выполнить скрипт top (скрипт, который проверяет $ _SESSION [ 'имя пользователя']).

Почему это?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Не повторяйте ничего, пока не закончится весь поток управления. Под этим я подразумеваю, что вы должны работать, чтобы отделить логику от дисплея (еще лучше: используйте шаблон, подобный Model-View-Controller ). В вашем случае, может быть, вы можете сделать что-то вроде этого:

<?php
/* Place all your control logic at the beginning.
   Do not echo anything in this block. */

session_start();

if ($_SESSION['username']) {
  $loggedin = true;
} else {
  $loggedin = false;
  ...    

  //Login form validation if user is not logged in and submitted form.
  //If login succeeded, set $loggedin to true.
  //At the end, create session variable.
}

//Destroy session if user pressed log out button.
  session_destroy();

/* Only display logic below, we do not change any state here */

if($loggedin) {
  echo logout button
} else {
  echo login form
}
?>
1 голос
/ 04 июля 2011

Ответ прост. Вам не нужно отменять сеанс после регистрации пользователя. Попробуйте это

<?php
session_start();

if ($_SESSION['username']) 
//User is already logged in, echo the log out button.
...    

else 
//User is not logged in, echo the log in form & button.
...    

//Login form validation if user is not logged in and submitted form.
//At the end, create session variable.

//Destroy session if user pressed log out button.
//session_destroy();
--- do a redirect or a refresh here .... 
?>
...