Сеанс входа в PHP не будет работать при загрузке первой страницы в новом окне без кеша - PullRequest
1 голос
/ 24 августа 2011

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

<?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 все, что мне нужно для входа в систему .. еще эхо все, что для не входа в систему .....

Ответы [ 3 ]

2 голосов
/ 24 августа 2011

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

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

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

1 голос
/ 24 августа 2011

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

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

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

0 голосов
/ 24 августа 2011

Если это общая сумма 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 ();заставить его записать сеанс, прежде чем он перенаправит на другую страницу.

...