PHP login session не работает на загрузке первой страницы в новом окне без кеша

Я работаю над созданием веб-сайта с нуля, и в настоящее время я застрял в сеансах. Обычно я знаю, как работают сессии и как хранить вещи в $_SESSION после session_start() но моя основная проблема заключается в этом. После очистки кеша и открытия нового окна, отправляя запрос на вход, FIRST время не будет правильно отправлено и перезагрузка страницы, и ничего не изменилось, но ПОСЛЕ первого раза все нормально работает … мой login.php обрабатывает либо: a) post request или b) логин по URL-адресу (для целей тестирования), поэтому ссылка на «user / login.php? username = facebook & method = get» будет отправлена ​​на указанный ниже код и установить пользователя для входа в систему с именем facebook ..

 <?php session_start(); $method = $_GET['method']; if($method == "get") $_SESSION['username'] = $_GET['username']; else $_SESSION['username'] = $_POST['username']; header('Location: http://www.imggroups.com'); ?> 

Я не уверен, если это имеет значение, но на индексной странице я проверяю, выполнил ли пользователь вход в систему. начальная сессия, очевидно, затем выполняется. if(isset($_SESSION['username'])) echo что мне нужно для входа в систему .. else echo, что бы не войти в систему …..

Проблема в том, что вы перенаправляете пользователя на новую страницу, но старая страница не завершена, поэтому сеанс еще не сохранен.

Чтобы исправить это, я обычно настраиваю страницу interum, которая перенаправляется на правильную страницу.

В качестве альтернативы вы можете использовать session_write_close () (http://www.php.net/manual/en/function.session-write-close.php) перед использованием перенаправления заголовка

Дело в том, что он устанавливает сеанс, НО перенаправляет вас в другой домен, в котором сеанс не разрешен. Если вы заходите на сайт без «www». перед тем, затем перенаправляйтесь к версии www после этого, тогда он собирается сказать, что ваша сессия не существует. Используйте следующее:

 session_set_cookie_params(0, '/', ".imggroups.com"); 

Поместите его перед session_start() и он будет работать как для www, так и для не-www-версий вашего сайта.

Если это общая сумма login.php, я считаю, что есть более простые способы сделать это:

  1. Если неважно, входит ли имя пользователя через _GET или _POST, используйте _REQUEST, поскольку он инкапсулирует оба.

     if( isset($_POST['username'] ) { $_SESSION['username'] = $_REQUEST['username']; } 
  2. Если это имеет значение, вам не нужно доверять или использовать внешний параметр, просто посмотрите, что там есть:

     if( isset($_POST['username'] ) { $_SESSION['username'] = $_POST['username']; } else if( isset($_GET['username'] ) { $_SESSION['username'] = $_GET['username']; } else { // whinge } 

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