我想确定用户是否已登录,或者他们是否只是来自javascript的匿名...
我找到了this question,但它是php代码,我不确定是否有一个名为logged_in的会话变量存储在登录中,或者只是那个人自己实现的东西。
任何人都知道如何检查用户是否从javascript登录,可能使用ajax?
编辑:我正在运行Asp.Net MVC,抱歉应该指定
这样我就可以实现客户端ajax登录。当页面加载时,我需要知道用户是否已登录,因此我可以使用jquery实现类似于<asp:LoggedInView>
控件的内容。
谢谢,
马特
答案 0 :(得分:10)
您无法从JavaScript中读取会话保存的数据。
一种简单的方法是从PHP创建一个JS var(比cookie解决方案更容易),如下所示:
if ($_SESSION['logged_in'] == 1) {
echo '<script type="text/javascript">var logged_in=true;</script>';
} else {
echo '<script type="text/javascript">var logged_in=false;</script>';
}
然后JS将只检查本机logged_in
var以查看用户是否已登录。
<script type="text/javascript">
if (logged_in) {
alert("My user is logged in!");
}
</script>
答案 1 :(得分:6)
[免责声明]由于我收到了很多关于这种“不良做法”的评论,我只想这样说:以这种方式这样做是不好的做法,但我们不知道原始海报打算做什么。据我们所知,他完成了其他一切100%正确和安全的事情,并且只是想知道是否有办法从javascript获取它。我在下面所做的就是如何完成他所要求的事情。 [/声明]
你可以拥有你的php,或者你正在使用的任何后端语言,设置一个你可以用javascript阅读的cookie。
document.cookie
这很简单。您必须在cookie字符串中搜索已登录cookie的名称。
您也可以使用它来设置cookie并通过javascript登录(虽然可能不是最好的主意。)
有关javascript cookie访问的快速概述,请参阅 here。
[编辑]
解决可访问会话信息的客户端脚本问题,以及原始问题中建议的可能使用的ajax:
是的,ajax调用将是一种非常简单的方法来检查这一点。我更像是一个jQuery人,所以我的ajax经验就在那里,但基本上,你会对你的后端函数进行ajax调用,而后端函数只检查'loggedin'会话变量,返回true或false。
此外,由于您现在提到您正在使用jQuery,请参阅this page以获得简单的jQuery cookie访问权限。 [/编辑]
答案 2 :(得分:2)
这是一种通常使用服务器端语言实现的解决方案。至少,JS,你 可以在其客户端设置一个存储该信息的cookie。
然而,对于Ajax,您应该有一个页面(例如check_login.jsp /.apsx等)在哪里检查 如果用户被记录(访问数据库,会话变量等),如果是这样,则返回JS(通过JSON)该信息,例如点亮带有绿色的DIV ......
所以:
check_login.aspx
- &GT;通过Response.Write("{user_logged:true}");
login.aspx
,您将进行AJAX调用,其中xmlhttp
已经是XMLHttpRequest
对象的实例...
var logged = JSON.parse(xmlhttp.responseText); // don't use eval
if(logged.user_logged)
document.getElementById("u_l").style.backgroundColor = "#00FF00";
答案 3 :(得分:1)
没有任何意义。 如果用户已登录,则您知道它是服务器端的。 因此,您无需检查是否已登录客户端。
- 编辑:
在您澄清之后,我只建议在控制器上验证用户是否已登录,如果是,您将显示正常视图,否则您将显示不同的视图。
- 编辑增加了格言:
有些人在面对问题时会想“我知道,我会使用ajax。”现在他们有至少两个问题
答案 4 :(得分:1)
我认为最佳方式是通过ajax来实现。
这样就可以了。
JS档案......
$.ajax({
type: 'POST',
dataType: 'json',
url: 'check.php',
success: function(d) {
if(d.r == "fail") {
window.location.href = d.url;
} else {
console.log(d.msg);
}
}
});
check.php
if(!isset($_SESSION['loggedin'])){
$response = array(
'r' => 'fail',
'url' => '/home.php'
);
} else {
$response = array(
'r' => 'success',
'msg' => 'Logged in'
);
}
echo json_encode($response);
exit;
答案 5 :(得分:0)
您可以解析document.cookie。
答案 6 :(得分:0)
您可以查看以下代码:
if(jQuery('body').hasClass('logged-in')) {
// add your jquery code
}