在PHP中,我会这样做:
if (isset($_COOKIE['user']) && $_COOKIE['user'] == $valueFromDb)
echo 'logged';
但在 JavaScript 中,我该如何检查它呢?谢谢。
在PHP中,我会这样做:
if (isset($_COOKIE['user']) && $_COOKIE['user'] == $valueFromDb)
echo 'logged';
如果会话在服务器端过期,没有可靠的方法可以在不向服务器发出请求的情况下完成此操作。在一个项目中,我采用了以下不完美的方式:
checkAuth() {
var logged = (function() {
var isLogged = null;
$.ajax({
'async': false,
'global': false,
'url': '/user/isLogged/',
'success': function(resp) {
isLogged = (resp === "1");
}
});
return isLogged;
})();
return logged;
}
我说它不完美是因为它会发起同步请求,这会暂时锁住浏览器。它的优点在于checkAuth()
可以可靠地从客户端应用程序的任何部分调用,因为它强制浏览器在继续执行JS代码之前等待结果,但仅此而已。
另一种选择是异步(非锁定)方法,可以像这样实现:
$.ajax({
'url': '/user/isLogged/',
'success': function(resp) {
if(resp === "1") {
// do your thing here, no need
// for async: false
}
}
});
<input type="hidden" class="UserIsLogged" />
<script type="text/javascript">
if ($(".UserIsLogged").length > 0) {
//User is logged
}
</script>
是的。 看看这个问题:使用jQuery创建、读取和删除cookie
一个插件可以让你更容易地实现它:http://plugins.jquery.com/project/cookie
/user/isLogged/
发出请求,该请求仅检查用户是否已登录(通过$_SESSION
),并发送“1”或“0”。async:false
选项强制浏览器等待请求完成-因此函数将始终返回布尔结果。 第二个示例意味着需要在success
回调中完成任何需要发生的事情,这需要不同的架构,但消除了同步请求的需要。请参见http://api.jquery.com/jQuery.ajax/。 - karim79