Я использую сеанс codeigniter для хранения имени пользователя. Когда пользователь открывается на нескольких вкладках, при выходе из системы на одной вкладке я хочу, чтобы страница была автоматически обновлена, когда пользователь посещает другую вкладку. Это возможно?
Просто протестируйте его, и самый простой способ, который я вижу (который, по-видимому, работает в Chrome, по крайней мере, но может потребовать дальнейшего тестирования) устанавливает cookie.
При выходе из системы сделайте что-то вроде setcookie('loggedout',1)
. Вам также нужно будет сделать обратное при входе в систему – unset($_COOKIE['loggedout'])
Тогда вам просто нужен простой Javascript …
function readCookie(name) { var nameEQ = escape(name) + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return unescape(c.substring(nameEQ.length, c.length)); } return null; } window.setInterval(function() { if(readCookie('loggedout')==1) { window.location.assign('loggedout.html') //Or whatever else you want! } },1000)
Это проверяет каждую секунду, чтобы узнать, установлен ли файл cookie. Магия.
Вот мой код ниже, чтобы решить проблему. Я установил файл cookie. Во время входа и удаления при выходе из системы. наоборот, при выходе из системы и входе в систему.
function readCookie(name) { var nameEQ = escape(name) + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return unescape(c.substring(nameEQ.length, c.length)); } return null; } function setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays*24*60*60*1000)); var expires = "expires="+d.toGMTString(); document.cookie = cname + "=" + cvalue + "; " + expires; } window.setInterval(function() { if(readCookie('loggedout')==1) { window.location.reload(); setCookie('loggedout',2,3); //Or whatever else you want! } else if(readCookie('loggedin')==1) { window.location.reload(); setCookie('loggedin',2,3); //Or whatever else you want! } },2000)
контроллер:
$this->load->helper('cookie'); $cookie = array( 'name' => 'loggedin', 'value' => '1', 'expire' => '86500' ); set_cookie($cookie); $domain= preg_replace("/^[\w]{2,6}:\/\/([\w\d\.\-]+).*$/","$1", $this->config->slash_item('base_url')); $path = explode($domain,base_url()); delete_cookie('loggedout'); delete_cookie('loggedout',$domain, $path[1] );
$cookie = array( 'name' => 'loggedout', 'value' => '1', 'expire' => '86500' ); set_cookie($cookie); $domain= preg_replace("/^[\w]{2,6}:\/\/([\w\d\.\-]+).*$/","$1", $this->config- >slash_item('base_url')); $path = explode($domain,base_url()); delete_cookie('loggedin'); delete_cookie('loggedin','localhost', '/<!-- Your path -->/'); delete_cookie('loggedin',$domain, $path[1] );