是否有一种安全的方法来检查用户是否已登录应用程序而不是检查用户的计算机中是否存在“sid”cookie?
我想让用户只有在登录后才能继续浏览页面上的某些链接。
我在服务器端进行登录验证,但希望避免请求行程。
纯JS或JQuery解决方案将不胜感激。
谢谢。
请试试这个
用户首次登录后输入此代码
jQuery(window).load(function() {
sessionStorage.setItem('status','loggedIn')
});
当用户点击链接时,你可以检查一下
if (sessionStorage.getItem('status') != null))
//redirect to page
}
else{
//show validation message
}
当您要求“安全方式”时:否。您应始终在服务器端验证所有请求的用户会话。
你可以做的就是让前端适应用户的当前状态。例如,将“Login”-Link更改为“Logout”-Link。为此,您可以在用户计算机上设置一些标记之王。您可以使用浏览器本地存储(http://www.w3schools.com/html/html5_webstorage.asp)。
你可以做的其他事情是改变例如链接的行为:
$("a").click(function(e){
if(localStorage.getItem("isLoggedIn") !== true) {
e.preventDefault();
// this prevents navigation and you can now do your js stuff here
}
});
如果您使用的是ASP.Net Identity,可以按如下方式进行检查
在剃刀:
@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;
}
}
它应该100%有效
将此代码放在用户登录页面之后(登录页面下一页)
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");
}
在我看来,你应该使用expirationDate将authToken
保存到本地存储,然后在每次请求时检查它是否已过期(不包括GET),如果authToken
已过期,还要与服务器一起验证。 2种方式验证。
客户端到客户端和客户端到服务器。两者都会正确匹配。