• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

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
...全文
370 点赞 收藏 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技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-05-26 07:13
社区公告
暂无公告