例如,如果用户登录,存储用户ID和/或他/她的角色/组的最佳方法是什么?显而易见的方法是Cookie和会话?还有其他的选择如何在整个asp.net mvc(剃须刀3)应用程序中存储值?
1
A
回答
0
至少,使用Forms Authentication可以将用户ID和角色放在Formst Auth票证中。
Here'a的我是如何做的一个例子:
public static HttpCookie CreateCookie(IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false)
{
var user = new AuthenticationTicketData() { Groups = @group, UserId = userId };
var ft = new FormsAuthenticationTicket(2, name, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout),
isPersistent, user.Pack());
var ck = new HttpCookie(FormsAuthentication.FormsCookieName)
{
Value = FormsAuthentication.Encrypt(ft),
Path = FormsAuthentication.FormsCookiePath,
Domain = FormsAuthentication.CookieDomain
};
if (isPersistent)
{
ck.Expires = DateTime.Now.Add(FormsAuthentication.Timeout);
}
return ck;
}
public static string Pack(this AuthenticationTicketData data)
{
if (data == null) throw new ArgumentNullException("data");
return String.Format("{0};{1}",PackUserId(data.UserId),string.Join(",",data.Groups));
}
static string PackUserId(IUserIdValue uid)
{
if (uid == null) throw new ArgumentNullException("uid");
var tpn = uid.GetType().GetFullTypeName();
return String.Format("{0}|{1}",tpn,uid.ToString());
}
public static HttpCookie SetAuthCookie(this HttpResponse response,IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false)
{
var ck = CreateCookie(userId, name, group, isPersistent);
response.AppendCookie(ck);
return ck;
}
另一种选择是保留用户会话在数据库中(没有联系到会议),就像一个表(GUID,用户名,用户ID ,角色expireAt)。但是,如果您想要跟踪用户何时登录/注销,或者您是否使用自己的身份验证(而不是表单身份验证),则此方法更合适。
+0
感谢您的示例和说明! – Chaka 2013-04-08 12:45:06
0
如果你想存储每个用户的价值,我会议是最好的选择。会话是在每个用户/浏览器的基础上创建的。每个用户都有他/她自己的会话对象,这样您就可以在应用程序之间保留用户角色信息,直到会话结束。
我绝对不会建议将用户安全信息存储在cookie中,因为这会在您的应用程序中造成很大的安全漏洞。
相关问题
- 1. 如何在asp.net MVC 3剃须刀
- 2. asp.net MVC 3剃须刀部署IIS7
- 3. ASP.NET MVC 3剃须刀递归函数
- 4. asp.net mvc 3剃须刀文件上传
- 5. asp.net MVC 3剃须刀/ LINQ的
- 6. asp.net mvc 3剃须刀&html表
- 7. asp.net MVC 3剃须刀和HTML IFRAME
- 8. asp.net MVC 3剃须刀自IEnumerable
- 9. ASP.NET MVC 3剃须刀DisplayFor代表
- 10. asp.net MVC 3剃须刀定制帮手
- 11. HTML.Partial - MVC 3剃须刀
- 12. 的SiteMapPath使用MVC 3剃须刀
- 13. ASP.NET MVC(剃须刀)部署
- 14. asp.net mvc剃须刀是没有对话框不在剃须刀
- 15. 显示整数值img标签在MVC 3剃须刀
- 16. 错误时,部署ASP.NET MVC 3剃须刀的Web应用程序服务器
- 17. webgrid中的Mvc 3 texbox(剃须刀)
- 18. asp.net MVC 3 - MVC 3剃须刀:国家选择下拉列表
- 19. 在mvc 3剃须刀应用程序中使用必要/推荐的AntiXss库
- 20. MVC 3剃须刀AJAX不起作用
- 21. 在ASP.NET MVC 3中的JqGrid列中添加ActionLink剃须刀
- 22. 显示在MVC 3剃须刀
- 23. MVC 3剃须刀模板在哪里?
- 24. HTML在MVC 3剃须刀@using块内
- 25. 如何在mvc 3剃须刀中使用lambda
- 26. 的DevExpress网格MVC 3剃须刀
- 27. ASP.Net MVC:如何在CSS文件中使用剃须刀变量
- 28. SignalR javascript在mvc剃刀应用程序
- 29. MVC 3剃须刀,语法错误
- 30. MVC 3 - 剃须刀 - 从模型
如果你想存储每个用户的价值,我认为这些是最好的选择 – pollirrata 2013-04-05 15:50:38
我不完全遵循,你能给我一个例子吗? – Chaka 2013-04-05 15:54:35
我在答案中添加了更多详细信息... – pollirrata 2013-04-05 16:00:27