如何查看用户是匿名用户还是从javascript登录?

时间:2009-07-31 14:34:45

标签: javascript authentication session-variables

我想确定用户是否已登录,或者他们是否只是来自javascript的匿名...

我找到了this question,但它是php代码,我不确定是否有一个名为logged_in的会话变量存储在登录中,或者只是那个人自己实现的东西。

任何人都知道如何检查用户是否从javascript登录,可能使用ajax?

编辑:我正在运行Asp.Net MVC,抱歉应该指定

这样我就可以实现客户端ajax登录。当页面加载时,我需要知道用户是否已登录,因此我可以使用jquery实现类似于<asp:LoggedInView>控件的内容。

谢谢,
马特

7 个答案:

答案 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}");

返回信息 使用JS在HTML代码中的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
 }