2016-01-13 76 views
1

在我们的内联网,每个用户都可以登录,当用户成功地连接检查的cookie仍然有效

setcookie('id_user', $res['id_user'], time()+600, '/'); 
setcookie('email', $res['mail'], time()+600, '/'); 
setcookie('firstname', $res['firstname'], time()+600, '/'); 
setcookie('lastname', $res['name'], time()+600, '/'); 

10分钟后,他们将到期被创建的cookie。

我有很多页面,其中js函数正在使用$_COOKIE变量。 我不想检查是否$_COOKIE为空或不是每个函数。

有没有办法触发一个js函数来检查cookie是否仍然可用?

我想这

var user = '<?php echo $_COOKIE['id_user']; ?>'; 

function check() 
{ 
    if(user === null) 
    { 
     console.log('logged'); 
    } 
    else 
    { 
     console.log('disconnected'); 
    } 
} 

check(); 
setInterval(check, 1000); 

但它并没有奏效。在访问此页面之前我已连接。即使从另一个页面断开,控制台始终显示“已连接”。我认为cookie仍然存在于页面中,并且没有过期。

如果我没有访问该页面之前连接,一个JS错误告诉我

SyntaxError: unterminated string literal 


var user = '<br /> 
+0

“未终止的字符串文字”是PHP首先发出错误消息的结果 - 检查页面源代码。除此之外,你不清楚你在问什么。 – CBroe

+4

JavaScript可以直接访问浏览器中的cookies,不需要使用php(它只在页面加载前运行一次,因此也是这个问题)。另外,你还有其他2个SO问题,你没有回复任何评论或答案。这不是如何工作,如果你想要体面的答案,你需要与人打交道 – Steve

+0

@CBroe这是因为PHP变量不存在 – Raccoon

回答

1

我管理这个使用下面的JS。该代码将每秒检查cookie是否仍然可用。

function check() 
{ 
    var user = getCookie('firstname'); 

    if(user == '') 
    { 
     console.log('disconnected'); 
    } 
    else 
    { 
     console.log('connected'); 
    } 
} 

function getCookie(cname) { 
    var name = cname + "="; 
    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); 
     if (c.indexOf(name) == 0) return c.substring(name.length,c.length); 
    } 
    return ""; 
} 

check(); 
setInterval(check, 1000); 
+0

为什么检查每一秒?在新的请求之后检查它是更实际的。 – schellingerht

+0

@Schellingerht如果用户什么都不做,直到cookie过期然后使用请求?你应该在每个功能前检查一下是否正确。如果只有<= 10个函数仍然可以,但是当您必须将此函数用于<1000 js函数时。使用计时器更方便。 – Raccoon