有没有一种安全的方法来检查用户是否已登录应用程序,而不是检查用户机器上是否存在“sid” cookie?
我希望只有在用户已登录时才允许其访问页面上的某些链接。
我在服务器端进行登录验证,但希望避免请求传输。
纯JS或JQuery解决方案将不胜感激。
谢谢。
有没有一种安全的方法来检查用户是否已登录应用程序,而不是检查用户机器上是否存在“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
}
});
@inject SignInManager<ApplicationUser> SignInManager
@if (SignInManager.IsSignedIn(User))
{
<input type="hidden" id="logged" value="true" />
}
else
{
<input type="hidden" id="logged" value="false" />
}
在JS中:
function check() {
var signed = $('#logged').val();
if (signed === 'true') {
//What you want to do
}
else {
window.location.href = "/YourController/YourAction?ReturnUrl=/YourReturnUrl;
}
}
我将分享我的客户端验证方法,同时减少对服务器的调用次数。 在我看来,使用会话存储进行验证并不是一个好的方法,因为它不能在选项卡之间共享。
当用户登录您的网站并向服务器发送请求时,请生成一个JWT令牌,有效载荷为其电子邮件ID,并将其作为cookie / json响应发送给客户端。我没有纯JS或jQuery代码,但如果您想要,我可以与您分享React代码,解释上述过程。
您甚至可以优化以上解决方案,使应用程序更加健壮和安全。
本地存储、会话存储、状态管理库不可靠,无法保护您的路由/数据,但它们可以用于减少对服务器的网络调用次数。
authToken
保存到本地存储中,然后每次请求时(不包括GET),检查它是否已过期,并与服务器验证authToken
是否已过期。这是双重验证。它应该百分之百地工作
在用户登录页面(登录页面的下一页)之后放置此代码
jQuery(window).load(function() {
sessionStorage.setItem('status','loggedIn')
});
每当用户点击链接时,您可以使用以下代码检查任何页面(任何页面)
if (sessionStorage.getItem('status') != null){
//redirect to page
alert("Is Login : True");
}
else{
//show validation message
alert("Is Login : False");
}