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字段.
编辑:
博客摘要:
获取现有的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)
| 归档时间: |
|
| 查看次数: |
28103 次 |
| 最近记录: |