9

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

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

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

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

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

谢谢,
马特

4

7 回答 7

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_invar 以查看用户是否已登录。

<script type="text/javascript">
    if (logged_in) {
        alert("My user is logged in!");
    }
</script>
于 2009-07-31T14:44:16.097 回答
6

[免责声明] 由于我收到很多人关于这是“不好的做法”的评论,我只想说:这样做是不好的做法,但我们不知道原来的海报是打算做的。据我们所知,他所做的一切都是 100% 正确和安全的,只是询问是否有办法从 javascript 中获取它。我在下面所做的事情是我对如何完成他所要求的事情的最佳想法。[/免责声明]

您可以让您的 php 或您使用的任何后端语言设置一个 cookie,然后您可以使用 javascript 读取该 cookie。

document.cookie

就那么简单。您必须在 cookie 字符串中搜索您登录的 cookie 的名称。

您也可以使用它来设置 cookie 并通过 javascript 登录(尽管可能不是最好的主意。)

有关 javascript cookie 访问的快速概述,请参见此处

[编辑]

为了解决客户端脚本可以访问会话信息的问题,以及原始问题中建议的可能使用 ajax:

是的,ajax 调用将是一种非常简单的检查方法。我更像是一个 jQuery 人,所以我的 ajax 经验就在那里,但基本上,你会对后端函数进行 ajax 调用,而该后端函数只是检查“loggedin”会话变量,返回真或假。

此外,由于您现在提到您正在使用 jQuery,请参阅此页面以轻松访问 jQuery cookie。[/编辑]

于 2009-07-31T14:38:11.100 回答
2

这是通常使用服务器端语言实现的解决方案。使用 JS,您至少可以在其客户端中设置一个存储该信息的 cookie。

但是,使用 Ajax,您应该有一个页面(例如 check_login.jsp/.apsx 等)来检查用户是否已登录(访问数据库、会话变量等),如果是,则返回 JS(通过 JSON)该信息,例如用绿色点亮一个DIV......

所以:

check_login.aspx--> 通过返回信息Response.Write("{user_logged:true}");

login.aspx带有 JS 的 HTML 代码中,您将有一个 AJAX 调用,其中您xmlhttp已经是XMLHttpRequest对象的实例...

var logged = JSON.parse(xmlhttp.responseText); // don't use eval
if(logged.user_logged)
document.getElementById("u_l").style.backgroundColor = "#00FF00";
于 2009-07-31T14:53:58.517 回答
1

它没有任何意义。如果用户登录,您就知道它是服务器端的。因此,您不必检查您是否已登录客户端。

- 编辑 :

在您澄清之后,我只能建议在控制器上验证用户是否已登录,如果是,您将显示正常视图,否则您将显示不同的视图。

-- 编辑添加格言:

有些人在遇到问题时会想“我知道,我会使用 ajax”。现在他们至少有两个问题

于 2009-07-31T14:46:54.050 回答
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);
                }
            }
        });

检查.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;
于 2016-04-11T22:01:15.867 回答
0

你可以解析document.cookie。

于 2009-07-31T14:38:23.317 回答
0

您可以使用以下代码进行检查:

if(jQuery('body').hasClass('logged-in')) {
 // add your jquery code
 }
于 2016-10-13T05:51:12.810 回答