登陆并将自定义信息存入cookie以实现分权访问!

以前做登陆都是使用login控件的,发觉如果要加入自定义的信息好象比较麻烦,所以参考了别人的东西后记录一下心得,参考:http://www.cnblogs.com/Showshare/archive/2010/07/09/1772886.html

  • 在这里我使用的是form认证,在web.config中设置不允许匿名访问。

 

<authehtication>节中设置了认证方式、cookie的名称、默认登陆页等信息,<authorization>节中设置不允许匿名。

  • 实现分权限是根据网站目录来划分的,不同的目录用<location>节中的<allow>...</allow>限制不同用户访问

在web.config中加入

 

1、注意上面的片断是加入到<system.web>节外的,与<system.web>同级的位置。

2、<location path="Register.aspx">...</location>段是说明在根目录下的Register.aspx是所有用户都可以访问,<location path="ManageAdmin">...</location>指定roles为"Admininstrators“的用户才可以访问ManageAdmin目录下的网页。

  • 建立自定义用户信息,在类中加入以下代码。

 

[Serializable]标识类为可序列化,因为以后要将UserInfo存入cookie中,而cookie只能储存字符所以要存入前先进行序列化。

序列化与反序列化函数:

 

以上两个函数要使用到System.IO和System.Runtime.Serialization.Formatters.Binary两个命名空间。

  • 要方便的使每个网页都可以访问到用户的信息,就要在页中加入自定义类型UserInfo,所以在类中定义一个page类作为所有已登陆页的基类

 

以后页面的.cs文件中就要改为以LoginBasePage为基类,如Default.apsx的.cs文件就要改为

public partial class _Default : myClass.LoginBasePage { protected void Page_Load(object sender, EventArgs e) { } }

其中myClass是我的类文件名称。以前要读取已登陆用户信息的话就直接用类似LoginUser.Name这样就可以了。

  • 另外,要实现按roles控制目录访问权限,就要设置好Contex.User.Identity的角色验证。现在每进入一个页面都需要将角色信息设置到Context.User中,那么最好的办法就是在Global.asax 文件中的Application_AuthenticateRequest方法中设置。

      Application_AuthenticateRequest方法,是在每次验证请求时触发,它与另外一个方法Application_BeginRequest的区别就在于,Application_AuthenticateRequest方法内,能够访问Context.User.Identity,而Application_BeginRequest则无法访问。

      我们在根目录添加一个Global.asax 文件,增加如下代码:

     

     

    此处,主要代码就是将Context.User.Identity强制转换为FormsIdentity类的对象,通过访问Ticket属性的UserData属性,获得被序列化后的对象的字符串,最后用方法Serialize.Decrypt<UserInfo>(strUser)将字符串反序列化成对象,再将UserInfo对象的Roles属性以“,”为分隔符分隔成角色数组,再用Context.User.Identity和角色数组生成一个新的GenericPrincipal对象,赋值给Context.User ,则Context.User 为已经设置好角色的验证对象。

      按照我们的设置,Admin用户能访问两个目录,而User1用户,则只能访问ManageUsers一个目录。

     

  • 最后就是Login.aspx中的内容了,下面模似了用户的认证过程,如果用户通过了认证就将用户信息序列化,加入到认证cookie中,然后加密cookie,最后写入认证cookie以完成用户登陆。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值