Я работаю в производственной среде, где пользователи часто выходят из системы. Несколько раз хуже других, но триггер почти всегда кажется, когда пользователь пытается открыть несколько страниц одновременно.Сессии, разрушаемые под высоким трафиком
Сессии хранят различную информацию, включая строку входа и идентификатор пользователя, которые используются для аутентификации. Если аутентификация не удалась, пользователь перенаправляется на страницу входа в систему.
Я выполнил несколько проверок, чтобы узнать, что происходит;
Я проверяю, чтобы сессия была начата с session_status
. Это происходит как активный сеанс.
Я также пытаюсь вывести переменные сеанса, но они возвращаются как не заданные.
Я также сравниваю идентификатор сеанса и отличается от предыдущего.
У меня нет полного доступа ко всем конфигурациям PHP, но я знаю, что сеанс истекает через 5 часов, но сеансы становятся разрушаемыми гораздо чаще, иногда в течение нескольких минут.
Каковы возможные причины или дополнительные шаги по устранению неполадок, которые я могу предпринять для решения этой проблемы?
Мы используем пользовательскую функцию сеанса и каждый раз регенерируем сеанс (отключение этого не позволяет устранить проблему). Функция:
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(); // regenerated the session, delete the old one.
}
ID другой сессии - новые сессии. старые там, но заброшенные/осиротевшие. это означает, что вы получаете свежий/чистый/пустой $ _SESSION. вам необходимо проверить настройки cookie и убедиться, что они совместимы на всех страницах, использующих сеанс. –
@MarcB Это правда, если подумать об этом, мы обновляем сеанс на каждой странице. Однако отключение этого не решило проблему. Я обновляю свой вопрос с помощью нашей функции сессии. – sharf
ах. если вы обновляетесь, это объясняет изменение идентификаторов. –