Forms身份验证情况下,能否自定义实现IIdentity接口,在Cookie中保存用户正确登录后的更多信息?

Mr.Osc 2006-05-26 07:13:38
在Forms身份验证情况下,能否自定义实现IIdentity接口,在Cookie中保存用户正确登录后的更多信息,MembershipUser总是通过自定义的Provider从数据库中获取信息,但有的用户信息在应用中使用非常频繁,数据量也并不是很大,想保存到自定义的IIdentity实例中。

页面通过登录界面登录成功后调用程序集以下代码:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(userName, false, 30);
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpContext.Current.Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

CustomIdentity identity = new CustomIdentity(ticket);
string[] roles = Roles.GetRolesForUser(userName);
GenericPrincipal principal = new GenericPrincipal(identity, roles);

HttpContext.Current.User = principal;

在其它aspx页面通过Page.User.Identity.GetType().ToString()得到的仍然是"FormsIdentity",为什么?
如果在使用Forms验证情况下自定义实现IIdentity接口无效的话,应该如何解决此问题呢?是否需要继承MembershipUser增加自定义实现?

XP+.NET 2.0+VisualStudio 2005
...全文
395 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ydone 2006-12-26
Forms
  • 打赏
  • 举报
回复
D__D 2006-12-06
Forms
  • 打赏
  • 举报
回复
sujo 2006-11-08
UserData可以放多少信息呢?我想要在自定义的SetAuthCookie放5个属性到Identity里面,要怎么写?
  • 打赏
  • 举报
回复
孟子E章 2006-06-04
UserData是一个标准的属性,存放在Cookie中
  • 打赏
  • 举报
回复
antiking 2006-06-04
GZ
  • 打赏
  • 举报
回复
Mr.Osc 2006-06-04
to net_lover(孟子E章):
大侠你说的通过UserData的方法在我的程序里生效了,我把用户登录成功后做页面转向的代码由FormsAuthentication.RedirectFromLoginPage(username, false)方法改成了Response.Redirect(FormsAuthentication.GetRedirectUrl(username, false))之后Identity的UserData和Version都生效了,能解释一下其中的原因么?多谢!
  • 打赏
  • 举报
回复
活靶子哥哥 2006-06-04
可以
自己实现Identity和IPrincipal都可以用到Froms验证中
  • 打赏
  • 举报
回复
孟子E章 2006-06-04
自定义 CustomIdentity 没有试过,不过,扩展MembershipUser是完全可以的
  • 打赏
  • 举报
回复
Mr.Osc 2006-06-04
to saucer(思归):
我的代码是在程序集中的,看了你给的那篇文章之后在Global.asax的Application_AuthenticateRequest中添加了文章中示范的代码,但是症状依旧,按照net_lover(孟子E章)的方法试着在Identity的UserData中加一些额外数据,但非常奇怪的是在用户认证通过后的页面打印出来的UserData居然是空值,搞不定啊。。。。
  • 打赏
  • 举报
回复
saucer 2006-05-29
你的这些编码是在哪里的?

CustomIdentity identity = new CustomIdentity(ticket);
string[] roles = Roles.GetRolesForUser(userName);
GenericPrincipal principal = new GenericPrincipal(identity, roles);

是在global.asax或者自己的模块里么?参考

http://www.codeproject.com/aspnet/formsroleauth.asp

这文章是针对ASP.NET 1.*的,但概念类似
  • 打赏
  • 举报
回复
Mr.Osc 2006-05-27
自己UP一下。。。
  • 打赏
  • 举报
回复
Mr.Osc 2006-05-26
to net_lover(孟子E章):
呵呵,多谢关注,我用Reflector看了FormsIdentity的实现,先用同样的代码实现了IIdentity接口,然后给我自己实现的类CustomIdentity添加一个属性,希望在我的应用中能够调用CustomIdentity的属性,但是因为通过Page.User.Identity得到的是一个FormsIdentity,所以我不能通过强制类型转换得到我自己添加的属性了。
  • 打赏
  • 举报
回复
自由人2008 2006-05-26
可以。。
  • 打赏
  • 举报
回复
ilovejolly 2006-05-26
mark
  • 打赏
  • 举报
回复
孟子E章 2006-05-26
可以啊,asp.net自带的久可以啊。有一个UserData的属性,就是存放你自己的数据的。不过 Cookie有大小限制,不适合存放很多的数据
  • 打赏
  • 举报
回复
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2006-05-26 07:13
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。