让自定义登录程序像 Membership 一样

ASP.NET 自带的用户登录程序很方便,但我们有时希望用自己的登录程序更灵活,或者我们要做单点登录,兼容 ASP.NET 自带的登录程序。

写在之前

约定一下,名称空间是 System.Web.Security。

首先,我们要启用 Forms 验证

<configuration >
     <system.web >
       <authentication  mode="Forms" > </authentication >
</configuration >

记录登录信息

当我们的登录程序判断用户登录成功后,就要把这个会话记录下来,在 ASP 中一般用 Session,在 ASP.NET 中默认用 Cookie。

FormsAuthenticationTicket ticket =  new FormsAuthenticationTicket(1,  "Admin",
                    DateTime.Now, DateTime.Now.AddDays(7),  false"自定义数据");
HttpCookie cookie =  new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
HttpContext.Current.Response.Cookies.Add(cookie);

Response.Write(User.Identity.IsAuthenticated);  // 本页中仍为 false,下页中才会为 true。

如上代码记录了当前登录的用户为 Admin,如果用户没关闭浏览器,那么这个会话会一直保持七天。

判断是否登录和登录名

User.Identity.IsAuthenticated、User.Identity.Name

不要在记录登录信息的页面判断,因为页面一开始从客户端获取 Cookie 信息,由于那时还没有执行到记录登录信息的程序,所以没有关于登录成功的 Cookie 信息。后面执行到了记录登录信息的程序,也将 Cookie 写入了客户端,但 ASP.NET 此时已经不会去取这个 Cookie 了,只有在下一个页面,或刷新本页面后,才会获取到登录信息的 Cookie。

注销

FormsAuthentication.SignOut();
// Response.Cookies.Clear(); // 后面不能再有涉及 Cookie 的操作,否则退出不了。

要注意的是,后面就不要去画蛇添足地去清除什么 Cookie 了,那样返回导致退出不了。

获取自定义数据

前面谈到可以用 User.Identity.IsAuthenticated、User.Identity.Name 判断用户是否登录、获取用户名。但是我还想要用户的更多信息,比如角色,怎么办呢?一种方法是根据用户名到数据库中去找。还有一种方法是将这些信息在登录成功后直接记录到 FormsAuthenticationTicket 的最后一个参数中。

记录简单,关键是如何取。

if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
     return result;
}

FormsIdentity fi = (FormsIdentity)HttpContext.Current.User.Identity;  // 须是 Forms 验证,需要已经 IsAuthenticated 才能转换为 FormsIdentity
FormsAuthenticationTicket ticket = fi.Ticket;
string userData = ticket.UserData;

这样就把 userData 取出来了,userData 的格式、约定就由您自己决定了。

转载于:https://www.cnblogs.com/jordan2009/archive/2012/10/18/2728873.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值