Следуя идее Адама. Сделайте свой подготовленный оператор вроде select my_column из my_table, где search_column in (#) Создайте строку x и заполните ее числом «?,?,?» в зависимости от вашего списка значений. Затем просто измените # в запросе на новую строку String x наполнитель
Вы должны установить собственный тайм-аут сеанса. Оба варианта, упомянутые другими ( session.gc_maxlifetime и session.cookie_lifetime ), не являются надежными. Я объясню причины этого.
Во-первых:
session.gc_maxlifetime
session.gc_maxlifetime указывает количество секунд, по истечении которых данные будут рассматриваться как «мусор» и очищены. Сборка мусора происходит во время запуска сеанса.
Но сборщик мусора запускается только с вероятностью session.gc_probability , деленной на session.gc_divisor . А используя значения по умолчанию для этих опций (1 и 100 соответственно), вероятность составляет всего 1%.
Ну, вы можете просто настроить эти значения, чтобы сборщик мусора запускался чаще. Но когда запускается сборщик мусора, он будет проверять действительность для каждой зарегистрированной сессии. И это требует больших затрат.
Более того, при использовании файлов PHP по умолчанию session.save_handler , данные сеанса сохраняются в файлах по пути, указанному в session.save_path . С этим обработчиком сеанса возраст данных сеанса рассчитывается на дату последнего изменения файла, а не на дату последнего доступа:
Примечание: Если вы используете обработчик сеанса на основе файлов по умолчанию, ваша файловая система должна сохранять отслеживание времени доступа (atime). Windows FAT не работает, поэтому вам придется придумать другой способ обработки сборки мусора в вашем сеансе, если вы застряли в файловой системе FAT или любой другой файловой системе, где отслеживание времени недоступно. Начиная с PHP 4.2.3 вместо atime используется mtime (дата изменения). Итак, ты выиграл У них есть проблемы с файловыми системами, где отслеживание времени недоступно.
Таким образом, дополнительно может произойти, что файл данных сеанса будет удален, в то время как сам сеанс все еще считается действительным, потому что данные сеанса не обновлялись недавно.
И второе. :
session.cookie_lifetime
session.cookie_lifetime указывает время жизни cookie в секундах, которое отправляется в браузер. […]
Да, верно. Это влияет только на время жизни cookie, и сам сеанс может оставаться действительным. Но задача сделать сессию недействительной - это задача сервера, а не клиента. Так что это ничего не помогает. Фактически, если для параметра session.cookie_lifetime установлено значение 0
, файл cookie сеанса станет настоящим файлом cookie сеанса , действительным только до закрытия браузера.
Заключение / лучшее решение:
Лучшее решение - установить собственный тайм-аут сеанса. Используйте простую метку времени, которая обозначает время последнего действия (например, запроса), и обновляйте ее с каждым запросом:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
// last request was more than 30 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
Обновление данных сеанса с каждым запросом также изменяет дату изменения файла сеанса, чтобы сеанс не удалялся сборщик мусора преждевременно.
Вы также можете использовать дополнительную метку времени для периодической регенерации идентификатора сеанса, чтобы избежать атак на сеансы, например фиксация сеанса :
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
// session started more than 30 minutes ago
session_regenerate_id(true); // change session ID for the current session and invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time
}
Примечания:
session.gc_maxlifetime
должно быть по крайней мере равным времени жизни этого настраиваемого обработчика истечения срока (1800 в этом примере); setcookie
с истечением срока действия time () + 60 * 30
, чтобы файл cookie сеанса оставался активным. Это должно зарегистрировать пользователя после времени набора? Установка времени создания сессии (или времени истечения), когда это регистрируется, и затем проверяя, который на каждой загрузке страницы мог обработать это.
Например:
$_SESSION['example'] = array('foo' => 'bar', 'registered' => time());
// later
if ((time() - $_SESSION['example']['registered']) > (60 * 30)) {
unset($_SESSION['example']);
}
Править: У меня есть чувство Вы означать что-то еще все же.
Можно фрагментировать сессии после определенной продолжительности жизни при помощи session.gc_maxlifetime
установка ini:
Править: ini_set ('сессия gc_maxlifetime', 60*30);
if (isSet($_SESSION['started'])){
if((mktime() - $_SESSION['started'] - 60*30) > 0){
//Logout, destroy session, etc.
}
}
else {
$_SESSION['started'] = mktime();
}