Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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
C# 验证ASP net web表单后的存储Id_C#_Asp.net_Session_Webforms_Forms Authentication - Fatal编程技术网

C# 验证ASP net web表单后的存储Id

C# 验证ASP net web表单后的存储Id,c#,asp.net,session,webforms,forms-authentication,C#,Asp.net,Session,Webforms,Forms Authentication,我想在通过电子邮件和密码进行表单身份验证后保存用户ID。我目前正在使用一个会话来执行此操作 但是,会话和表单身份验证有不同的超时,并且由于当一个用户登录时会话是服务器类型的变量,如果我在另一台计算机上使用不同的用户名登录,会话简单更改其值,这是一个主要问题 除了缓存,还有其他方法可以实现吗?您可以将用户ID存储在扩展的身份验证cookie中。在授权例程上,编写自定义cookie并将其添加到响应: var ticket = new FormsAuthenticationTicket(1, user

我想在通过电子邮件和密码进行表单身份验证后保存用户ID。我目前正在使用一个会话来执行此操作

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


除了缓存,还有其他方法可以实现吗?

您可以将用户ID存储在扩展的身份验证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);