Здесь я нашел решение для определения, был ли сеанс живым или нет.
Нет необходимости в накладных расходах ..
Мы можем обнаружить и перенаправить тайм-аут сеанса по обычным http-запросам.
Где, как в ajax, мы должны относиться к этому по-другому, с некоторой логикой.
# шаг 1 (на стороне сервера)
На стороне php.
Сначала создайте функцию аутентификации, которая должна вызывать эту аутентификацию в первой строке всей страницы.
Лучше всего добавить эту функцию auth () в файл config.php или файл auth.php и включить во все файлы php после создания сеанса.
include 'config / auth.php';
// in auth.php file copy and past the following lines
function auth() {
if (!isset($_SESSION['USER_ID'])) {
// checking whether the request is ajax or not. Ajax requests are xml http request
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// set a status code manually. 418 is unused http code
header("HTTP/1.0 418 Session Timeout", TRUE);
// return or send a json response with status string and location to redirect
echo json_encode(array(
"status" => "time_out",
"location" => BASE_URL . "login.php?message=Session Timeout! Please log in and Try again.",
));
exit;
}
// whether the request is normal http request do the redirection from the server side
if (basename($_SERVER['PHP_SELF']) != 'login.php') {
header("Location:" . BASE_URL . "login.php");
}
} }
# шаг 2 (на стороне клиента)
Здесь я использую jQuery
создайте файл js, который должен вызывать все html (шаблоны) страницы в проекте.
Лучше всего включать в верхний или нижний колонтитул commen
создать настройки ajax
$.ajaxSetup({
statusCode: {
418: function (respose) {
// $.parseJSON() can avoid by specifying dataType:"json" in ajax parameters
var jsonObject = $.parseJSON(respose.responseText);
if (jsonObject.status == "time_out") {
window.location = jsonObject.location;
}
}
}
});
Хорошего дня ...