假设我有一个菜单项:
<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,请有人帮帮我!这不是一项任务,但我正在学习它自己的
答案 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)。
流程是: