2017-10-04 63 views
-1

我想在通过电子邮件和密码进行表单认证之后保存用户ID。我目前正在使用一个会话来这样做;认证后的商店Id ASP网络表单

但是,会话和表单身份验证有不同的超时,因为会话是一个用户登录时的变量的服务器类型,如果我在另一台机器上用不同的用户名登录会话简单地更改其值,这是一个主要问题。

除了缓存还有其他方法可以完成吗?

回答

0

您可以将用户标识存储在扩展的身份验证Cookie中。在授权程序撰写定制cookie并把它添加到响应:

var ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(60), false, userId.ToString())); 
HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)) { HttpOnly = true }); 

可以解密该cookie的身份验证请求,并找出哪些是用户ID:

HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; 
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); 
int iserId = int.Parse(authTicket.UserData);