Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查用户是否已在客户端登录_Javascript_Jquery_Sails.js - Fatal编程技术网

Javascript 检查用户是否已在客户端登录

Javascript 检查用户是否已在客户端登录,javascript,jquery,sails.js,Javascript,Jquery,Sails.js,是否有一种安全的方法来检查用户是否已登录应用程序,而不是检查用户的计算机中是否存在“sid”cookie 我想允许用户只有在登录后才能继续访问页面上的某些链接 我在服务器端进行登录验证,但希望避免请求失败 纯JS或JQuery解决方案将不胜感激 谢谢。请试试这个 在用户首次登录后输入此代码 jQuery(window).load(function() { sessionStorage.setItem('status','loggedIn') }); 当用户点击一个链接时,你可以像这样检查

是否有一种安全的方法来检查用户是否已登录应用程序,而不是检查用户的计算机中是否存在“sid”cookie

我想允许用户只有在登录后才能继续访问页面上的某些链接

我在服务器端进行登录验证,但希望避免请求失败

纯JS或JQuery解决方案将不胜感激


谢谢。

请试试这个

在用户首次登录后输入此代码

jQuery(window).load(function() {
  sessionStorage.setItem('status','loggedIn') 
});
当用户点击一个链接时,你可以像这样检查

if (sessionStorage.getItem('status') != null))
    //redirect to page
}
else{
    //show validation message
}
当您要求“安全方式”时:否。您应该始终在服务器端验证用户的会话是否满足所有请求

不过,您可以做的是使前端适应用户的当前状态。例如,将“登录”链接更改为“注销”链接。为了让它工作,你可以在用户机器上设置一些国王的旗帜。您可以将浏览器本地存储用于此()

例如,您可以执行的其他操作是更改例如链接的行为:

$("a").click(function(e){
    if(localStorage.getItem("isLoggedIn") !== true) {
        e.preventDefault();
        // this prevents navigation and you can now do your js stuff here
    }
});

应该100%有效

将此代码放在用户登录页之后(下一页登录页)

当任何用户点击一个链接时,您都可以使用下面的代码检查任何页面(任何页面)


我认为,您应该在本地存储中保存一个带有expirationDate的
authToken
,然后在每次请求时检查它是否过期(不包括在内),并与服务器验证
authToken
是否过期。2方法验证


客户端到客户端和客户端到服务器。两者都将正确匹配。

如果您使用的是ASP.Net标识,您可以按如下方式进行检查

在Razor中:

@inject SignInManager<ApplicationUser> SignInManager

@if (SignInManager.IsSignedIn(User))
        {
            <input type="hidden" id="logged" value="true" />
        }
        else
        {
            <input type="hidden" id="logged" value="false" />
        }

登录到什么?您可以在服务器端验证中创建cookie,然后使用jquery在客户端检查该cookie。感谢您的及时回复。检查用户是否存在sails.js sid会话cookie有多安全?这个答案应该是可以接受的,因为问题是如何安全地进行检查,这确实是不可能的(客户机代码不可信;在客户机上设置/读取一段信息,无论是在cookie、本地存储中还是从cookie、本地存储中读取,都不会改变这一点)。安全模型依赖于不被篡改的客户机执行堆栈(例如,浏览器)(即安装安全、开源或可信任的浏览器),以及在网络堆栈上(请参阅middleman=>https://),您应该知道会话存储不会在各个选项卡之间共享。如果用户执行“在新选项卡中打开”,则新选项卡将不具有会话存储值。有一些方法可以使用本地存储作为中介将会话存储从一个选项卡复制到另一个选项卡。请参阅
if (sessionStorage.getItem('status') != null){
//redirect to page
alert("Is Login : True");
 }
 else{
  //show validation message
 alert("Is Login : False");
 }
@inject SignInManager<ApplicationUser> SignInManager

@if (SignInManager.IsSignedIn(User))
        {
            <input type="hidden" id="logged" value="true" />
        }
        else
        {
            <input type="hidden" id="logged" value="false" />
        }
function check() {
var signed = $('#logged').val();

if (signed === 'true') {
    //What you want to do
}
else {
    window.location.href = "/YourController/YourAction?ReturnUrl=/YourReturnUrl;
}
}