Я работаю над созданием веб-сайта с нуля, и в настоящее время я застрял в сеансах. Обычно я знаю, как работают сессии и как хранить вещи в $_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, я считаю, что есть более простые способы сделать это:
Если неважно, входит ли имя пользователя через _GET или _POST, используйте _REQUEST, поскольку он инкапсулирует оба.
if( isset($_POST['username'] ) { $_SESSION['username'] = $_REQUEST['username']; }
Если это имеет значение, вам не нужно доверять или использовать внешний параметр, просто посмотрите, что там есть:
if( isset($_POST['username'] ) { $_SESSION['username'] = $_POST['username']; } else if( isset($_GET['username'] ) { $_SESSION['username'] = $_GET['username']; } else { // whinge }
Я раньше не сталкивался с этой проблемой с PHP, но вы также можете использовать session_write_close (); чтобы заставить его записать сеанс, прежде чем перенаправить его на другую страницу.