还是Forms验证

yibin2006 2007-06-12 09:35:41
<authentication mode="Forms">
<forms defaultUrl="default.aspx" loginUrl="default.aspx" domain="" path="/" name=".TESTDEMO" ></forms>
</authentication>
采用Forms验证
登录后创建一个票据:
string userData = this.username.Value + "$" + userid.ToString();
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, FormsAuthentication.FormsCookieName, DateTime.Now, DateTime.Now.AddDays(1), SaveCookies, userData, FormsAuthentication.FormsCookiePath);
string HashTicket = FormsAuthentication.Encrypt(Ticket);
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
if (SaveCookies)
UserCookie.Expires = Ticket.Expiration;
Response.Cookies.Add(UserCookie); //输出Cookie
FormsAuthentication.RedirectFromLoginPage(this.username.Value,SaveCookies);
按理说,这个Ticket的UserData中应该有username$userid
可结果呢?
在另一个页面中获取ticker并打印出属性:
FormsAuthenticationTicket ticket = ((FormsIdentity)Page.User.Identity).Ticket;
foreach (PropertyInfo p in ticket.GetType().GetProperties())
{
Response.Write(p.Name+"==="+p.GetValue(ticket,null)+"<br />");
}
值如下:
Version===2
Name===111111
Expiration===2007-6-12 9:43:08
IssueDate===2007-6-12 9:13:08
IsPersistent===False
Expired===False
UserData===
CookiePath===/
UserData为空了....
怎么回事?
如果把 <forms defaultUrl="default.aspx" loginUrl="default.aspx" domain="" path="/" name=".TESTDEMO" ></forms>中的domain设为"/"就行,但这样一来,注销就失效了,这个地方应该如何设定值?
...全文
220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yibin2006 2007-06-12
  • 打赏
  • 举报
回复
TO:bsing(知其白守其黑,为天下式.为天下式,常德不忒,复归於无极)
读取来的ticket也不是我写进去的那个。
怀疑是不是写cookie时写错了?
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, this.username.Value, DateTime.Now, DateTime.Now.AddDays(1), SaveCookies, userData, FormsAuthentication.FormsCookiePath);

string HashTicket = FormsAuthentication.Encrypt(Ticket);
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
UserCookie.Domain = FormsAuthentication.CookieDomain;

if (SaveCookies)
UserCookie.Expires = Ticket.Expiration;
Response.Cookies.Add(UserCookie);
这有问题么?
bsing 2007-06-12
  • 打赏
  • 举报
回复
从cookie里面读
FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(HttpContext.Current.Request.Cookies[cookieName].Value);
yibin2006 2007-06-12
  • 打赏
  • 举报
回复
FormsAuthenticationTicket ticket = ((FormsIdentity)Page.User.Identity).Ticket;
这个获取的根本不是登录时创建的ticket...
如何才能真正获取登录时创建的Ticket?
WNASP 2007-06-12
  • 打赏
  • 举报
回复
GZ
bsing 2007-06-12
  • 打赏
  • 举报
回复
Global.asax:

void Application_AuthenticateRequest(object sender, EventArgs e)
{
try
{
if (Context.Request.Cookies[CookieName] != null)
{
HttpCookie authCookie = Context.Request.Cookies[CookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = new string[] { "Member" };
//这里改成你响应的ticket里面读取到的roles

GenericIdentity genericIdentity = new GenericIdentity(authTicket.Name);
GenericPrincipal genericPrincipal = new GenericPrincipal(genericIdentity, roles);
Context.User = genericPrincipal;
}
else
{
Context.User = null;
}
}
catch
{
Context.User = null;
}
}
Aden 2007-06-12
  • 打赏
  • 举报
回复
<authentication mode="Forms">
<forms name=".TESTDEMO" loginUrl="default.aspx" protection="All" timeout="60" path="/">
</forms>
</authentication>

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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

试试用AI创作助手写篇文章吧