Javascript 检查用户是否已登录

Javascript 检查用户是否已登录,javascript,php,Javascript,Php,嘿,我对这种工作完全陌生!实际上我想检查用户是否成功登录 假设我有一个菜单项: <li><a href="#" title="Know about Java" onclick="CheckSignIn()">Java</a></li> 我知道如何使用php来实现它 <?php session_start(); if (isset($_SESSION['loggedin']) && $_SESSION['loggedin

嘿,我对这种工作完全陌生!实际上我想检查用户是否成功登录

假设我有一个菜单项:

  <li><a href="#" title="Know about Java" onclick="CheckSignIn()">Java</a></li>
我知道如何使用php来实现它

<?php
session_start();

if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
    echo (welcome user);//sort of                           
} else {
    echo "please login!";           
}
?>


简单地说,我想检查用户是否使用javascript登录,我知道我不能在java脚本中使用php,有人能帮我吗!这不是一个作业,但我正在自己学习它

您不能使用JavaScript检查会话变量,因为会话变量存储在服务器上。为此,您必须使用js异步调用服务器端代码。jQuery ajax可以帮助您进行异步调用。


甚至$\u SESSION也是一个PHP变量,所以我确信您应该能够在javascript变量中获得它。

一种方法是向服务器发送一个xhr,如果用户登录(即设置了会话值,最终进行数据库调用),它将返回true或false,解析响应并返回true或false

另一种方法是在登录时发送存储在浏览器会话存储中的加密令牌(jwt是我当前使用的)

所以要么你把所有东西都放在服务器端 或者您有客户端UI,它向服务器端api发出请求

两者都有优点和缺点

如果您有向api发出请求的客户端UI,比如在您的示例中,我建议您在登录时发送JWT,将其存储在浏览器的会话存储中。 现在,您希望在客户端检查用户是否出于显示目的登录。因此,检查sessionStorage中是否存在令牌,这意味着用户已登录。现在,当向服务器发出请求时,您将在头字段中发送该令牌。服务器检查令牌的有效性,如果有效,则执行操作。如果不是,状态403

这也有缺点,用户需要登录它打开的每个浏览器窗口。将其存储在localStorage中增加了新的安全注意事项,这超出了问题的范围(CSP、X-Frame-Options等)。JWT默认使用RSA和SHA256(RS256)

流程是:

  • 用户填写登录表单并点击提交
  • 服务器接收登录信息,如果有效,则发送令牌
  • 如果响应状态!=403 | 401将令牌存储在会话存储中
  • 当向受保护的资源发出请求时,客户端会在头字段中发送令牌
  • 服务器检查令牌的有效性
  • 如果有效,则发送受保护的资源(或请求的内容)
  • 客户端呈现收到的内容

  • 您需要理解服务器端代码和客户端代码之间的区别。你所要求的并不安全。我知道你想要达到的是教育目的,但说真的,不要在任何地方使用它。记住;JavaScript永远都不安全。无论函数多么模糊或隐藏,如果它们在客户端运行,它们都可以被操纵。应始终在服务器端检查身份验证(登录)。如果您想向客户端显示他们已登录,可以让服务器给客户端一个包含该消息的页面,或者使用Ajax异步加载该页面,但我如何允许我的用户仅在他们是成员时访问链接!您可以在服务器端执行验证。比如说
    GET/api/v1/protected\u resources/123
    您的浏览器在标题中发送令牌。处理程序(我们称之为protected.php)从头部读取令牌。如果有效,则返回受保护的内容;如果无效,则不执行任何操作或发送403(禁止)。假设浏览器在模板中呈现响应内容是有效的。让我们假设允许user1查看资源,令牌在服务器端具有info
    user:user1
    ,如果为true,则检查acl“user1是否有权访问protected1”,如果为true,则发送protected1,因为您不需要查询acl,因此不需要对用户的访问级别进行区分。如果令牌有效,则可以使用localstorage.setItem返回受保护的资源。这是一个数据集。请注意,您只能在其中存储字符串。例如:localstorage.setItem('loggedIn','false');
    <?php
    session_start();
    
    if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
        echo (welcome user);//sort of                           
    } else {
        echo "please login!";           
    }
    ?>