2012-01-02 5 views
0

У меня есть переменная сеанса 'loginStatus', которая устанавливается при загрузке первой страницы. У меня есть if/else для того, чтобы эхо-сообщение «установить в первый раз» в браузере, когда этот «loginStatus» устанавливается в первый раз. «Настройка в первый раз» НИКОГДА НЕ БУДЕТ! Я очистил кеш, я попытался перейти на страницу index.php в окне браузера за пределами среды разработки Netbeans - не имеет значения. Это похоже на то, что сеанс постоянно остается на моем локальном веб-сервере.session variable уже установлен

Вот код, который обнаруживает неинициализированную переменную сеанса loginStatus при первом загрузке страницы и создает/инициализирует переменную сеанса только один раз.

if (isset($_SESSION['loginStatus'])) 
{ 
    // we get here ONLY if the 'loginStatus' session variable has already been 
    // created for this user's session. 
    $_SESSION['loginStatus'] = "loginStatus already set!"; 
    echo '<br />Just set the loginStatus to: ' . $_SESSION['loginStatus'] . '<br /><br />';  
} 
else 
{ 
    // we only get here the first time this is sent by the server 
    // to the user's browser -- so we need to create the 'loginStatus' session 
    // variable because the user just came to our site 
    // and has not yet logged in. 
    $_SESSION['loginStatus'] = "First-time initialization of loginStatus"; 
    echo '<br />Just set the loginStatus for the first time!<br /><br />'; 
} 

Я никогда увидеть в окне браузера «Просто установите LoginStatus в первый раз!»

Все, что я вижу в окне браузера: «Просто установите loginStatus на: loginStatus уже установлен!»

Другими словами - Исеть() ошибочно возвращение правда очень первый раз мои загрузки страницы!
Я не вижу оправдания для переменной сеанса, которая уже волшебна, когда я впервые загружаю страницу в браузере!

Хотя я загрузил приведенную выше страницу несколько раз сегодня вечером при написании кода, я понял, что когда вы покидаете заключительную страницу, сеанс уничтожается. Итак, почему моя переменная $ _SESSION ['loginStatus'] висит вокруг, как родственник, который опоздал на прием?

+0

'var_dump ($ _ SESSION)' в верхней части страницы , посмотреть, что он содержит, и работать оттуда. – Kenaniah

+0

@ Kenaniah - Я сделал это и увидел это: array 'loginStatus' => string 'loginStatus уже установлен!' (длина = 24) – wantTheBest

+0

выполните сеанс session_unset(); session_destroy(); 'для очистки сеанса браузера на стороне сервера. – Kenaniah

ответ

1

Сессия будет уничтожена, когда и по установленным ей правилам (в GC сессии) в файле php.ini. Это не происходит, когда вы закрываете браузер или просматриваете другие страницы.
Прочитайте руководство по сеансу в php.net и установите правила сеанса наилучшим образом, который вам подходит.

Например, на сайтах с высокой степенью защиты я даю сеансу время в несколько минут. Значит, если пользователь не выполняет никаких действий, которые делают запрос на сервер в течение этого срока, сеанс истекает.

+0

Что такое «лучшая практика», чтобы убедиться, что данные сеанса удаляются, когда пользователь покидает сайт, я имею в виду ** программно ** в ответ на, скажем, окончательное уведомление на моем веб-сайте, что «ваш пользователь закрыл все страниц на вашем сайте и уходит, делать какие-либо очистки, что вам нужно делать? ?? Каков общий способ сделать это? Конечно, есть способ «поймать» «событие» или что-то, что дает мне шанс избавиться от нежелательных переменных сеанса, когда пользователь выполнил мой сайт! – wantTheBest

+1

@wantTheBest: чувак, я не тролль. Никто не заботится об истекших сессиях, кроме новичков, просто поверьте мне. Вы можете пометить его столько, сколько хотите :-) И ** нет никакого гарантированного способа «поймать» событие покидания сайта - просто представьте, что клиент просто снял с него интернет-кабель – zerkms

-1

не уверен, но это может потому, что вы должны сохранить эти значения в вашем печенье,

пытается очистить кук и перезагрузите страницу

+0

false. данные сеанса хранятся на сервере и НИКОГДА не отправляются в файл cookie. cookie PHP-сессии содержит ** ТОЛЬКО ** имя пары имя/идентификатор сеанса. –