zoukankan      html  css  js  c++  java
  • ASP.NET基于表单的验证实现网上安全访问,管理(1)

    什么时候用?

    比如ASP.NET程序的一个Admin文件夹,是专门进行网上管理用的(比如后台数据维护),一般访问者不能访问里面的所有文件.只有通过验证的用户才能访问.按照以前的ASP的做法,是在用户通过Login页面时,设置Session(即Cookie)来判断用户是否通过验证,每个Admin文件夹里的页面文件都要设置验证语句,而且并不是很安全,这个时候,ASP.NET的4种验证方式之一:基于表单的验证就派上了用场.您做的仅是在Admin文件夹里面放置一个只有几行语句的Web.config文件.

    怎样用?

    这个问题您可以去看书籍上的介绍(Wrax出版的《ASP.NET高级编程》),不过,我这里有自己常用的方式,不妨看看.
    文件目录为:
     +BIN
     +Admin
        - *.aspx
        - web.config //Admin文件夹下的web.config
     login.aspx
     web.config //根目录的web.config
    1,根目录的web.config的配置

    <configuration>
     
    <system.web>
      
    <authentication mode="Forms">
       
    <forms name="mycookiename" loginUrl="login.aspx" protection="All" timeout="30">
       
    </forms>
      
    </authentication>
      
    <authorization>
       
    <allow users="*"/>
      
    </authorization>
     
    </system.web>
    </configuration>


    2,Admin文件夹下的web.config的配置

    <configuration>
     
    <system.web>
      
    <authorization>
       
    <deny users="?" />
      
    </authorization>
     
    </system.web>
    </configuration>


    3,login.aspx的配置
    此页面就是一个验证登陆页面:

    <asp:textbox id=textname runat=server/>帐号
    <asp:textpassword id=textpassword runat=server>密码
    <asp:checkbox id=mycheckbox runat=server/>是否记住密码,永久登陆
    <asp:button runat=server onclick=btnloginclick text=登陆/>

    处理事件1(当用户点击登陆按钮时候)

    void btnloginclick(Object sender,EventArgs e)
    {
     
    if(用户通过验证)//这一点可以在bin目录放置自己的dll文件来验证用户,返回一个bool.
     {
     FormsAuthentication.RedirectFromLoginPage(UserName.Text, mycheckbox.Checked);
    //这句用来存储Cookie来说明用户UserName.Text通过的验证,可以访问Admin文件夹了,另外,如果那个永久登陆的checkbox被checked了,则这个验证Cookie的失效日期可以长达50年(默认为浏览器时间).
     ResponseRedirect("Admin");//这时,就可以畅通无阻访问Admin文件夹了.
     }

    }


    处理事件2(当用户已经通过验证,就没有必要在访问login.aspx时候再次输入密码了)
    这个由表单验证自动完成,相当于:

    void Page_Load(Object sender,EventArgs e)
    {
     
    if(Context.User.Identity.IsAuthenticated)Response.Redirect("Admin");
    }

    4,注销验证:
    用FormsAuthentication.SignOut();

    其实,上述方案并不是很安全的解决方案.只是很实用,简单,又比较安全的验证解决方案.

  • 相关阅读:
    [LeetCode] 131. 分割回文串
    [LeetCode] 130. 被围绕的区域
    [LeetCode] 128. 最长连续序列
    [LeetCode] 129. 求根到叶子节点数字之和
    转:阿里巴巴集团技术丛书——淘宝一线团队实践
    转:开源知识库
    转:php使用websocket示例详解
    阿里巴巴上市背后的技术力量
    转:php中实现精确设置session过期时间的方法
    转:Java程序员最常用的8个Java日志框架
  • 原文地址:https://www.cnblogs.com/caca/p/22451.html
Copyright © 2011-2022 走看看