2009-07-23 2 views
0

Я использую PHP5 здесь. Я сделал систему входа в систему, которая проверяет имя пользователя и пароль на записи в базе данных. Я хочу использовать сеансы для хранения зарегистрированного значения. Например, когда я достигаю зону, где я «войти» пользователь успешно:Проблема времени сеанса PHP

if($errors = 0) { 
    $_SESSION['logged'] = "1"; 
} 

Проблема заключается в том, что я хочу $_SESSION['logged'], чтобы оставаться активным в течение, скажем, 5 минут, так когда я делаю if($_SESSION['logged'] == "1") после этого времени для возврата false. Кроме того, я хотел бы удалить этот сеанс после того, как пользователь закроет браузер. В принципе, мне нужна конфигурация сеанса, чтобы пользователь мог спокойно покинуть свой стол, а когда он или кто-то нажмет обновить через 10 минут или снова войдет после закрытия браузера, сеанс будет удален, а доступ будет ограничен.

Может ли кто-нибудь помочь? Благодарю.

+0

См. Http://stackoverflow.com/questions/1003001/automatically-re-direct-a-user-when-session-times-out-or-goes-idle – Gumbo

ответ

2

Используйте session_set_cookie_params(), чтобы изменить срок действия файла cookie сеанса. Обратите внимание, что по умолчанию оно установлено в 0, что означает, что cookie установлен до тех пор, пока пользователь не выйдет из браузера. Вы можете сделать это следующим образом:

/* Set to 0 if you want the session 
    cookie to be set until the user closes 
    the browser. Use time() + seconds 
    otherwise. */ 

session_set_cookie_params(0); 
session_start(); 

Затем проверьте время последней активности, обновляется каждый раз, когда кто-то посещает страницу.

if(($_SESSION['lastActivity'] + 300) < time()) { 
    // timeout, destroy the session. 
    session_destroy(); 
    unset($_SESSION); 
    die('Timeout!'); 
} else { 
    $_SESSION['lastActivity'] = time(); 
} 
+0

Вы можете уничтожить файл cookie, но часто сеанс остается в силе до тех пор, пока сеанс не будет уничтожен, и этот PHP обычно называют сессией сбора мусора. Различие имеет значение только в том случае, если у вас есть пользователь с неправильно сконфигурированным или злонамеренным браузером или их куки были украдены/фыркнуты и т. Д. –

+0

** @ Daniel Papasian: ** Вот почему вы умираете после проверки таймаута , Файл cookie содержит только идентификатор сеанса (по умолчанию).Вредоносный пользователь не может изменять время 'lastActivity', которое использует время сервера (поэтому изменение времени клиента не влияет на это значение). –

0

Сессии остаются в живых, так как пользователь остается на вашем сайте. Вам нужно будет использовать файлы cookie для установки определенного тайм-аута.

+0

Я читал о session.gc_maxlifetime один раз и как это отправляет сеанс на «мусор». Я думал, что смогу использовать что-то вроде этого ...? –

1

Вы можете изменить настройки session.cookie_lifetime конфигурации, например, в php.ini или файле .htaccess:

session.cookie_lifetime определяет жизни куки в секундах , который отправляется в браузер. Значение означает «пока браузер не будет закрыт». По умолчанию: 0.

Это означает (я думаю), что вы не можете иметь оба срока действия на основе тайм-аута и истечения срока действия, когда браузер закрыт. Поэтому, возможно, лучше всего сохранить значение по умолчанию и установить свой собственный таймер в $_SESSION, как предложили другие, что делает этот ответ бессмысленным.

2

Вместо того, чтобы устанавливать его на один, почему бы вам не установить $_SESSION['logged_time'] = time();, а затем проверить время от времени() в вашем приложении?

Если вы хотите завершить весь сеанс, то точная спецификация может измениться в зависимости от вашего обработчика сеанса, но для обработчика сеанса по умолчанию (и любого другого хорошо обработанного сеансового обработчика) вы хотите проверить http://us3.php.net/manual/en/session.configuration.php