authentication mode="Forms"/>

这样之后,ASP.NET运行时就知道我们启用了Forms验证,在生命周期的验证阶段就激活FormsAuthenticationModule模块。
 
       还有一点要特别注意:<authentication/>元素节点只能在应用程序的根文件夹中的 web.config中配置。如果在子文件夹中使用这个节点就会报错。这也说明了每个应用程序只能定义一个身份验证类型。
 
       而且在<authentication/>节点中,我们还可以进行更多的设置。如下:


 <authentication mode="Forms ">
       <forms name="MyCookie"
               loginUrl="Login.aspx"
              timeout="60"
              path="/"
              protection="All">            
       
       </forms>
 </authentication>

我们下面就看看<forms>节点中的属性的含义和用途:
       name:定义身份验证cookie的名称。因为我们把身份验证的票据是存放在cookie中的,而且我们必须给身份验证cookie取具有唯一性的名称,防止和其他的应用程序中的cookie冲突。

loginUrl:从英文名字就可以知道是关于登录的。实际上就是标明把用户重定向到哪个页面取登录。

timeout:设置身份验证cookie持续的时间,以分钟为单位的。而且这个时间是一个相对的时间,就是说每次对用户进行验证时,cookie的期限就会被重新设置。如果在60分钟内用户再没有向服务器发起请求,那么cookie就过期,之后如果用户再次发起请求,那么就要重新输入用户名和密码等信息。

path:设置cookie的保存的路径,一般是设置为"/",我们不要轻易的改变。
 
       我们之前也说过,我们的身份验证的票据是加密以后再存放如cookie中的,然后再把cookie发送到客户端。当客户端再次请求的时候,再服务器端就会解析客户端发送来的cookie信息,我们必须要确认:客户端发送来的cookie信息就是我们之前从服务器端发送过去的,也就是说,我们要判断,我们的cookie在客户端是否被篡改了。
 
       所以,这就是<forms/>中属性protection的用途。protection的值有四个:
       Encryption:对cookie的内容信息进行加密。
       Validation:向cookie中的内容添加MAC(消息验证代码),以便服务器判断cookie是否被篡改了。
       None:禁用加密和篡改检查
       All:同时启用加密和篡改检查。
 
       默认情况下是"All",因为它可以把数据加密放入cookie中,而且对返回到服务器端的cookie进行验证。

   用户信息的存储
 
       我们一般把用户的信息,如用户名和密码存放在数据库中。如之前一篇文章说的,我们也可以把用户的用户名和密码信息直接放在web.config文件中。
 
       Forms验证其实对把用户凭证信息放在哪里提供了很大的灵活性。默认情况下是放在web.config中的。如下代码:


 <authentication mode="Forms ">
       <forms name="MyCookie"
              loginUrl="Login.aspx"
            
              timeout="60"
              path="/"
              protection="All">

<credentials>
           <user name="xiaoyang" password="xiaoyang"/>
           <user name="panyan" password="panyan"/>
         </credentials>
       
      </forms>
 </authentication>

见上面的  <credentials>节点,就是我们存放的用户信息。上面的信息是以明文(没有加密)的形式存放。我们也采用加密的方式存放,只要配置如下:<credentials  passwordFormat="MD5">,配置 passwordFormat的加密方式就行了。那么用户在传输之前就会被加密。
 
       还有就是把用户信息存储在数据库中,我们后面会讲述的,也是最常用的方式。

   web.config配置的一些用法
       1.在web.config中添加用户凭证
       我们之前说过了,ASP.NET的身份验证中,对于如何存储用户凭证提供了很大的灵活性。默认情况下是把凭证存储在web.config中的。
       我们还是来看看之前配置的一些节点信息:


   <authentication mode="Forms ">
        <forms name="MyCookie"
              loginUrl="Login.aspx"
            
              timeout="60"
              path="/"
              protection="All">

<credentials>
           <user name="xiaoyang" password="xiaoyang"/>
           <user name="panyan" password="panyan"/>
         </credentials>
       
        </forms>
   </authentication>

在<credentials>中就是我们存储的用户的一些信息。不知道大家是否还记得我们之前已经说过了的Authenticate方法:只有把用户信息存放在了配置文件中,我们才可以使用这个方法,代码如下(判断提交的用户信息是否合法):
  bool IsAuthenticate= FormsAuthentication.Authenticate(userName, userPassword);
 
       2.拒绝匿名用户访问
       其实这是与用户授权的问题现关联的,关于授权问题,我们以后谈,这里只是简单的提下,算是预热吧!
       我们可以拒绝匿名用户访问我们的网站,只要配置如下:

<authorization>
       <deny users="?"/>
   </authorization>

谈起这个节点,还是有一些话题的,这个我们在专门讲述授权的时候具体谈。现在我们的重点是验证!

  Forms验证一些简单的使用

其实对于任何一种验证来说,无非就是提供输入用户信息的界面,也就是常见的登录页面。登录页面可以很简单:只要提供输入用户名和密码的输入框就行了,而登录页面的功能就是验证输入信息是否正确,如果正确就创建身份验证的票据并且保存在cookie中。
 下面就看看一个简单的页面以及代码的实现:

注:界面很简单,大家可能会想到ASP.NET现有的Login控件,但是Login是基于MemberShip的。现在谈MemberShip还过早,因为我们后面文章专门的讲解从Forms验证到MemberShip的自然过渡,那样大家就可以很清楚的知道MemberShip到时怎么回事。
 
       代码部分,其实主要是"登录"按钮背后的代码:


 protected void  btnLogin_Click(object sender, EventArgs e)
{

if (FormsAuthentication.Authenticate(txtUserName.Text, txtUserPasswork.Text))
        {
             FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);
        }
     else
        {
             throw new Exception("登录失败!!!");
        }
}

代码的前提是:我们把用户的信息存放在了web.config文件中,因为我们用了Authenticate方法。
       首先代码就判断提供的用户名和密码是否正确,如果正确,那么就通过了验证,那么我们就调用RedirectFromLoginPage就把用户定位了他们最初请求的页面。
       注意:当我们调用RedirectFromLoginPage方法时,RedirectFromLoginPage就创建一个身份验证的票据,即把用户的信息写入票据中,并且加密,并把票据写入cookie,然后就把用户定位了他们最初请求的页面。我们只是写了一行代码就实现了很多的功能。

还有一点就是RedirectFromLoginPage方法的第二个参数指出了是否应该创建一个持久性的cookie,即用户关闭浏览器后依然保留cookie。我们常常实现"记住我"的功能就是传入了true.
 
       当我们登录了之后,要注销也只要一行代码:

protectedvoidbtnloginOut_Click(objectsender, EventArgs e)
{
FormsAuthentication.SignOut();
}

  Forms验证中的Cookie问题


       之前我们所见到的示例都是利用非持久性的身份验证cookie来维持请求之前的身份验证。这就意味着:如果用户关闭浏览器,cookie就期满失效,下次还需要在此登录。从安全的方面还说,这是个好事。

身份验证cookie中保存的身份验证票据是ASP.NET应用程序识别用户的工具。例如,如果一个用户拥有一个管理员的有效验证票据,那么我们的ASP.NET网站就会认为这个用户就是管理员。

尽管使用持久化的身份验证cookie风险很大,但是还是有很多的用处的。例如,如果我们只是仅仅为了区别不同的用户,而不是对受限资源的访问进行限制,那么我们就不要求用户在每次访问站点时都登录,这样我们就可以利用持久化的cookie,而且创建持久化的cookie也很简单,如我们之前用的RedirectFromLoginPage,只要把方法的第二个参数设置为true就行了。

除此之外,创建持久化的身份cookie,我们还可以使用SetAuthCookie,并且把第二个参数设置为true。如下:
       FormsAuthentication.SetAuthCookie(txtUserName.Text, true);

持久化的cookie只有在调用了FormsAuthentication.SignOut();方法之后才会过期。并且持久化的cookie不会受到web.config中的<forms>节点中设置的超时的影响。如果我们希望持久化的cookie超时,我们就要调用FormsAuthentication类的GetAuthCookie方法,设置cookie的期满日期和时间,并且我们自己手动的把它写入HTTP响应。

如下面的代码,我们创建一个时间为一周的持久化的cookie(代码加了注释):

protectedvoidbtnLogin_Click(objectsender, EventArgs e)
{
                //判断用户提供的验证信息是否正确
if(FormsAuthentication.Authenticate(txtUserName.Text, txtUserPasswork.Text))
{
                        //创建一个持久化的身份验证cookie
HttpCookie cookie =FormsAuthentication.GetAuthCookie(txtUserName.Text, true);

//设置cookie的有效时间
cookie.Expires =DateTime.Now.AddDays(7);

//手动添加到HTTP响应中
Response.Cookies.Add(cookie);

//跳转到最初请求的页面
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUserName.Text, true));
}
                else
{
                        thrownewException("登录失败!!!");
}
}

其中GetRedirectUrl获取用户最初请求的URL

http://www.cnblogs.com/yanyangtian/archive/2009/05/28/1491227.html

转载于:https://www.cnblogs.com/goodsunny/archive/2013/06/02/3114318.html

web.config forms节点中的属性的含义和用途相关推荐

  1. Java -- XStreamAlias 处理节点中的属性和值

    Java -- XStreamAlias 处理节点中的属性和值 XStreamAlias 可以把objec和xml相互转换,但是有时候节点带有属性和值就需要特殊处理下: <?xml versio ...

  2. C#发布网站在web.config和IIS中设置Session过期时间

    C#发布网站在web.config和IIS中设置Session过期时间 web.config <system.web> <sessionState mode="InProc ...

  3. asp.net中web.config配置节点大全详解

    web.config 文件查找规则:        (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找.        (2)如果当 ...

  4. Asp.Net web.config配置节点大全详解

    web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结 点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在we ...

  5. Asp.net下web.config或是bin中的dll有变更后,重启的问题

    asp.net会监测站点的web.config以及dll,如果这些文件有变更,会导致程序重启,这也是为了保证程序信息的安全性:那么有没有什么办法可以让它不重启呢,答案是肯定的. 为了防止程序重启,需要 ...

  6. 关于Meta标签中format-detection属性及含义

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...

  7. AndroidManifest.xml中常用属性及含义

    一. 关于AndroidManifest.xml         AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件 ...

  8. html 中 TabIndex 属性 的含义

    参考地址:1.http://blog.163.com/huan12_8/blog/static/1305190902011274739628/2.http://www.imwangfu.com/tab ...

  9. Css中Position属性的含义

    position有四个参数:static  | relative | absolute | fixed position:static,意味元素没有被定位,元素会出现在文档本该出现位置,是页面元素默认 ...

最新文章

  1. 腾讯竟然是这样招人的,哈哈哈哈哈
  2. windows container (docker) 容器资料笔记
  3. python中与label类似的控件是_python中tkinter的使用(控件整理)(一)
  4. Android 系统(75)---Android常用的网路框架
  5. Android-LayoutInflater
  6. js object转数组_const 和 Object.freeze() 的区别 ?
  7. web本地开发环境集成工具:​​​​MAMP Pro
  8. rails关于utf8问题-------------------utf8申明必须置顶
  9. spss方差分析_SPSS统计案例:考虑交互作用的双因素方差分析
  10. r型聚类分析matlab实现,浅谈Matlab中的聚类分析 Matlab聚类程序的设计
  11. 如何训练大脑提升专注力
  12. 求助!KeyError:None of [Index(['2017-01-01, ...\n dtype='object', length=365)] are in the [columns]
  13. 计算机教育课题申请报告,课题结项申请报告
  14. 马云:中国企业不缺创新缺管理思想
  15. Ubuntu下装memcache
  16. 给视频智能配音怎么弄?一步一步让你学会配音操作
  17. excel阅读器Android,Excel阅读器
  18. Oracle删表报错ora00054,【Oracle】ORA-00054 错误解决方法
  19. ANDROID中的VOLD分析
  20. [2020 年百度之星·程序设计大赛 - 复赛] Binary Addition

热门文章

  1. 我的docker随笔10:docker客户端使用其它主机的docker服务器
  2. cad怎么快速算面积_微信收到CAD图纸打不开怎么办?2种方法教你手机CAD快速看图...
  3. 【Elasticsearch】搜索引擎从0到1 有赞 视频笔记
  4. 【clickhouse】mac 10.15.7使用docker安装clickhouse
  5. 【hortonworks/registries】Parameter Schema name is null
  6. 【Kafka】[Group Metadata Manager on Broker xx]: Removed 0 expired offsets in kafka.coordinator.GroupMe
  7. 【Docker】Mac下Docker启动Kubernetes
  8. 【Siddhi 5】Siddhi 自定义函数@Extension使用
  9. 【Flink】Flink开发中遇到的问题及解法
  10. 【Spark】Spark的Kryo序列化