Как пользователь автоматически выйдет из всех открытых вкладок, когда пользователь выйдет из одной из них

Я создал страницу входа, среди многих других страниц, которая содержит код для проверки сеанса. Если у пользователя нет сеанса, все страницы будут перезагружать и перенаправлять на страницу выхода. Этот скрипт вызывается каждые три секунды.

Код, который я написал, работает нормально, но я хочу реализовать его по-другому. Когда пользователь выходит из системы, все открытые вкладки перезагружают / обновляют, заставляя пользователя выходить из системы. Это возможно?

sessioncheck.php :

<?php session_start(); if(isset($_SESSION['username']) && $_SESSION['username'] != ''){ echo "true"; } else { echo "false"; } ?> 

Этот код находится в нижнем колонтитуле страницы:

 <script> function gettatus(){ $.get("sessioncheck.php", function(data){ if(!data) { window.location = "logout.php"; } setTimeout(function(){ checkLoginStatus(); }, 3000); }); } $(document).ready(function(){ gettatus(); }); </script> 

Related of "Как пользователь автоматически выйдет из всех открытых вкладок, когда пользователь выйдет из одной из них"

Когда ajax полезен

Выполнение запроса ajax на ваш сервер каждые 3 секунды полезно только в случае 1. вы открыли вкладки в разных браузерах 2. или на многих компьютерах. 3. или вы используете очень старые браузеры

Настройка cookie не работает.

Подход с использованием файла настроек cookie не работает, поскольку одна вкладка не знает об изменениях файлов cookie на другой вкладке. Это из-за document (где куки-файлы получены с помощью getCookie) вкладки A не меняются без запроса на сервер. Вы можете открыть две вкладки SO и попытаться установить setCookie('name', 'val', 1) на одной вкладке и посмотреть на document.cookie на другой вкладке.

Как сделать еще одну вкладку сразу узнали о выходе из системы

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

Вы можете подключить прослушиватель к событию storage (активирован при изменении элемента хранилища) и отправить сигнал logout-event из logout-event .

 localStorage.setItem('logout-event', 'logout' + Math.random()); 

Каждая другая вкладка получит его с прослушивателем.

 window.addEventListener('storage', function(event){ if (event.key == 'logout-event') { // .. } }); 

Что делать, если старые браузеры без localStorage

Вы можете использовать оба подхода – localStorage и auto-refresh, например каждые 60 секунд, чтобы убедиться, что он работает, когда вкладки открываются на разных компьютерах. Если localStorage не работает (очень старые браузеры), автоматически обновляйте каждые 3 секунды.

Следующая скрипка показывает, как с этим справиться.

Что еще?

Вы можете использовать node.js + socket.io для отправки сигналов между всеми браузерами пользователя. Он работает быстро и выйдет из системы на каждом устройстве, но с ним немного сложнее, чем с обычным jQuery.

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

 <?php session_start(); if(isset($_SESSION['username']) && $_SESSION['username'] != '') echo true; else echo false; ?> 

Итак, в файле logout.php вы, вероятно, делаете что-то вроде этого unset ($ _ SESSION ['username']); и session_destroy ();

Поэтому, когда ваша страница вызовет эту проверку php, вы найдете false взамен и что следующий пользователь больше не получит доступ из любого браузера и любых страниц. И для автоматического выхода из системы попробуйте это

 $sessionTTL = time() - $_SESSION["timeout"]; if ($sessionTTL > $inactive) { session_destroy(); unset($_SESSION['username']); echo false; с $sessionTTL = time() - $_SESSION["timeout"]; if ($sessionTTL > $inactive) { session_destroy(); unset($_SESSION['username']); echo false; 

Примечание: вы должны установить $inactive = 6000; (например) в качестве глобальной переменной при входе в систему

Для этого у вас есть два варианта. Либо сохраняйте значения сеанса на сервере и часто делайте запросы Ajax на сервер, чтобы проверить, все ли пользователи вошли в систему или нет. Но это сделает огромную нагрузку на сервер, а также потребляет пропускную способность сети пользователя. Или,

проверьте, что зарегистрированный файл cookie все еще существует или не используется в браузере. Это будет хороший подход .

Оба могут выполняться setTimeout или setInterval

Но второй должен быть хорошим.

Вот что вам нужно. В этом фрагменте показана некоторая ошибка, о которой я не знаю. Итак, скопируйте код javascript в консоль браузера (f12) и проверьте его. Он работает. Когда вы входите в систему, вы должны использовать

 setCookie('loggedin','true',1); 

Здесь мы устанавливаем файл cookie,

 function setCookie(cookiename, cookievalue, expdays) { var d = new Date(); d.setTime(d.getTime()+(expdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cookiename + "=" + cookievalue + "; " + expires; } function getCookie(cookiename) { var name = cookiename + "="; var startPos = document.cookie.indexOf(name); if(startPos == -1) return null; startPos+=(name.length); if(document.cookie.indexOf(";",startPos) == -1){ return document.cookie.substring(startPos,document.cookie.length); } else{ return document.cookie.substring(startPos,document.cookie.indexOf(';',startPos)); } return null; } function checkCookie() { var loggedin = getCookie("loggedin"); if (loggedin && loggedin !=null) { // Logged in //do nothing } else{ window.location.href="login.php"; } } 
 <!-- use the below code in logged in home page to check whether the user is logged in still or not in a time interval of 1 second. Change 1000 as per your need.//--> <body onload = "setTimeout(checkCookie,1000);">