ASP.Net在Auth Cookie中存储用户数据

Don*_*mas 26 membership asp.net authentication forms-authentication

我想在auth cookie的用户数据部分中存储一些数据,如用户昵称和用户ID(表主键).我这样做的原因是在浏览器关闭时保留这些数据,而无需用户重新登录.

编辑:哎呀!意识到我没有很好地解释自己.我不是试图根据他们的cookie重新验证用户.用户已经通过ASP.Net的会员系统进行身份验证 - 这部分很好.我的问题是,如果我想显示用户的昵称,例如,我必须触发另一个SQL查询,然后将其存储在会话中.我认为将这些信息存储在UserData部分中的auth cookie(再次,由ASP.Net创建的那个)中是有意义的,这似乎是为此目的而创建的.

我不想使用配置文件,因为我有自己的用户表和配置文件数据,我需要一个轻量级的解决方案.

在auth cookie的用户数据部分对这些数据进行编码的好方法是什么?我在想序列化,但这可能有点过分.我是以错误的方式来做这件事的吗?

Dan*_*anH 36

我在这里写了一篇关于如何做到这一点的深入教程:

http://www.danharman.net/2011/07/07/storing-custom-data-in-forms-authentication-tickets/

这样可以保持加密和身份验证,并使用json将类序列化为UserData字段.

编辑:

博客不再存在,可以在此处的Web存档中找到存档.

博客摘要:

获取现有的cookie和身份验证票

HttpResponse response = HttpContext.Current.Response;
bool rememberMe = true;
var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe);
var ticket = FormsAuthentication.Decrypt(cookie.Value);
Run Code Online (Sandbox Code Playgroud)

定义您的自定义数据(确保这可以序列化为json)

var userData = new YourUserClass(...);
Run Code Online (Sandbox Code Playgroud)

使用您的数据和现有的身份验证票证设置创建新的身份验证票证

var newTicket = new FormsAuthenticationTicket(ticket.Version, 
    ticket.Name, 
    ticket.IssueDate, 
    ticket.Expiration, 
    ticket.IsPersistent, 
    userData.ToJson(), //This is where you'd set your user data
    ticket.CookiePath);
var encTicket = FormsAuthentication.Encrypt(newTicket);
Run Code Online (Sandbox Code Playgroud)

将自定义票证设置为cookie并添加到响应中

cookie.Value = encTicket;
response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)

  • 如果你的帖子与你的帖子相关联,那么这个答案会更有用.如果您的网络服务器被公交车撞了,这个答案将不再有用. (2认同)

Don*_*mas 10

显然我是在正确的轨道上:http://www.asp.net/learn/security/tutorial-03-vb.aspx(步骤4:步骤4:在票证存储附加用户数据)