是否有一种安全的方法来检查用户是否已登录应用程序而不是检查是否" sid" cookie存在于用户的机器中?
我想让用户只有在登录后才能继续浏览页面上的某些链接。
我在服务器端进行登录验证,但希望避免请求行程。
纯粹的JS或JQuery解决方案将不胜感激。
谢谢。
答案 0 :(得分:7)
请尝试此
用户首次登录后输入此代码
jQuery(window).load(function() {
sessionStorage.setItem('status','loggedIn')
});
当用户点击链接时,您可以检查
if (sessionStorage.getItem('status') != null))
//redirect to page
}
else{
//show validation message
}
答案 1 :(得分:1)
当您要求安全的方式":否。您应该始终在服务器端验证所有请求的用户会话。
你可以做的就是让前端适应用户的当前状态。例如,将"登录" -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
}
});
答案 2 :(得分:1)
如果您使用的是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;
}
}
答案 3 :(得分:0)
应该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");
}
答案 4 :(得分:0)
我认为您应该将带有{expirationDate的authToken
保存到本地存储,然后在每次您请求某些内容(不包括GET)时检查它是否过期,并且还应与服务器一起验证{{ 1}}是否过期。 2种方式验证。
客户端到客户端和客户端到服务器。两者都将正确匹配。