检查用户是否已登录

时间:2014-06-08 17:26:02

标签: javascript php

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

假设我有一个菜单项:

  <li><a href="#" title="Know about Java" onclick="CheckSignIn()">Java</a></li>

当用户点击它时:

function CheckSignIn() {
    //here i want to check login

    if (!login) {
        alert('please login');
    } else {
        window.open('new page url here');
    }
}

我知道我怎么能用PHP做到这一点。

<?php
session_start();

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

access-php-variable-in-javascript非常相似

即使$ _SESSION是一个PHP变量,所以我相信你应该能够在javascript变量中得到它。

答案 2 :(得分:0)

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

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

所以你要么拥有服务器端的所有东西 或者你有客户端UI向服务器端api发出请求。

两者都有优点和缺点。

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

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

流程是:

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