转自:http://blog.csdn.net/yan0lovesha/archive/2005/01/16/255395.aspx
在我的上一篇《使用HttpContext中的User属性来实现用户身份验证》中已经讲了怎样来使用HttpContext.User属性来实现用户身份验证,并且还写了一个示例程序。但是,在上一篇文章中,我们使用的是系统缓存来保存用户的登录信息,这无疑是占用系统资源的一种做法,那有没有更好的办法呢?我在上一章中说过大家可以尝试使用用户验证票的方式来保存用户登录信息的,这种方式是基于Cookie原理来实现的,因此避免了使用缓存所带来的困扰。我们已经有了上一篇的基础,这次只需要在它的基础上稍加修改就可以了。
要使用这种方法,我们首先要配置web.config文件,把<authentication>节点的属性mode改为Forms,再在该节点中添加<forms name="ContextUser" loginUrl="~/WebForm1.aspx" protection="None" slidingExpiration="true" />,这些代表的意思可以在MSDN上查到,这里就不多作解释了。
下面是修改后的代码:
MyPage.cs
using System;
using System.Collections;
namespace HttpContextUserEG
{
/// <summary>
/// MyPage 的摘要说明。
/// </summary>
/// 继承自Page类
public class MyPage : System.Web.UI.Page
{
public MyPage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected override void OnInit(EventArgs e)
{
base.OnInit (e);
this.Load +=new EventHandler(MyPage_Load);
}
//在页面加载的时候从缓存中提取用户信息
private void MyPage_Load(object sender, System.EventArgs e)
{
if(Context.User.Identity.IsAuthenticated)
{
if(!(Context.User is MyPrincipal))
{
MyPrincipal principal = new MyPrincipal(Context.User.Identity.Name);
Context.User = principal;
}
}
}
}
}
MyPrincipal.cs
using System;
using System.Collections;
namespace HttpContextUserEG
{
/// <summary>
/// MyPrincipal 的摘要说明。
/// </summary>
/// 实现IPrincipal接口
public class MyPrincipal : System.Security.Principal.IPrincipal
{
private System.Security.Principal.IIdentity identity;