путаница сессий - PullRequest
       1

путаница сессий

0 голосов
/ 11 февраля 2011

Я хочу выйти из системы, если сеансы пользователя старше 30 минут. Этот код правильный?
если да, может кто-нибудь объяснить это, пожалуйста? если нет, вы скажете мне, в чем проблема и решение? если я не буду использовать это время истечения, сайт будет небезопасным?

  if((mktime() - $_SESSION['started'] - 60*30) > 0){ 
    //logout, destroy session etc<br>
  } 
}else{
  $_SESSION['started'] = mktime(); 
} 

Ответы [ 5 ]

2 голосов
/ 11 февраля 2011

Просто позвольте PHP нормально обработать время ожидания сеанса. Установить в php.ini

  session.gc_maxlifetime = 1440

до количества секунд, в течение которых проходит сеанс.
По умолчанию установлено значение 1440 секунд или 24 минуты.

Чтобы предотвратить перехват сеанса, вы можете, например,

  • проверить IP-адрес инициатора сеанса и IP-адрес из следующих запросов (не идеально, и у вас могут возникнуть проблемы с людьми, у которых нет фиксированного IP-адреса, отключающегося и повторно подключающегося в течение 24 минут с другим IP-адресом)
  • или добавьте другой файл cookie, установите только один раз (никогда не истекает), имея вероятное уникальное значение (хэш md5). Когда сеанс создается, вы сохраняете это значение в сеансе и проверяете это значение по отношению к сеансу во время следующих обменов (при условии, что stealer не будет копировать этот файл cookie).
0 голосов
/ 11 февраля 2011

PHP уже позаботился о том, чтобы
Сессия истекла через 24 минуты бездействия по умолчанию.
Вам не нужно беспокоиться.

0 голосов
/ 11 февраля 2011

Сначала вы должны использовать time() вместо mktime(), потому что вы все равно не конвертируете компоненты даты и времени.

А затем вам следует переписать условие в нечто большеедля чтения:

 if ( time() > $_SESSION['started'] + 60*30 ) {

В зависимости от вашего варианта использования вы также можете подумать о том, чтобы не использовать время запуска, но, возможно, использовать lastaccess, например.(Вы также можете заранее определить время «уничтожения» при создании сеанса, что упростит логику.)

0 голосов
/ 11 февраля 2011

«Я хочу выйти из системы, если сеансы пользователя старше 30 минут. Этот код правильный?»

Нет, ваш текущий код отключит пользователя, если он не будет действовать с 30 минут.вам нужно:

}else if(!isset($_SESSION['started'])){
  $_SESSION['started'] = mktime(); 
} 
0 голосов
/ 11 февраля 2011

используйте time() вместо mktime(), тогда это должно быть правильно.

, но я бы сказал, что не полагайтесь только на $ _SESSION ... Есть более безопасные способы, то есть база данныхоснованное управление сессиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...