Wu.Country@侠缘

勤学似春起之苗,不见其增,日有所长; 辍学如磨刀之石,不见其损,日所有亏!

导航

[导入]表单验证与Cookies

关于表单验证:
对于ASP.net里的表单验证,差点让我郁闷死了。前些时候也遇到过这样的问题,但都解决了,而且没有遇到今天这样的问题。

看这样的例子,谁也想不到会是这样的麻烦:
login.aspx里:
private void LinkButton1_Click(object sender, System.EventArgs e)
{
   FormsAuthentication.RedirectFromLoginPage("WebbUser",false);
}
而在index.aspx里只有一个简单的命令:
  private void LinkButton3_Click(object sender, System.EventArgs e)
  {
   FormsAuthentication.SignOut();  
  }
然而就是这简单的两三行,让我郁闷了一天。就是因为IE和ASP.net本身都有缓存的原因,所以上面的那个签出事件发生以后,并没有马上实现,也就是说这样做返回的是真:
  private void LinkButton3_Click(object sender, System.EventArgs e)
  {
   FormsAuthentication.SignOut(); 
   User.Identity.IsAuthenticated;
  }
我试了好多次,都必须测试好几次,也就是说要签出好几次才能成功,而且我每次签出都要独立的运行三次(真不知道为什么)。
而且这样做也不行,一样要让这个函数执行三次:
private void LinkButton3_Click(object sender, System.EventArgs e)
{
FormsAuthentication.SignOut(); 
FormsAuthentication.SignOut();
FormsAuthentication.SignOut();
}
郁闷死了。
试了近四个多小时,后来都想放弃了。
在index.aspx里做了一个小的测试,加了一个button让它向页面里写内容。这样就行了,虽然签出后,页面可能没有变,还是原来的index.aspx页面,但执行其它的命令的时候就会要求登录了。当然我也试了好多其它的情况,都要登录了。这就是说,前面的情况是因为ASP.net的缓存所引起的。当然也有一些IE缓存。
当然,ASP.net的而在缓存一定是要配置一下的,但对于在学习一些简单的问题的时候,就要注意了,很多情况下,ASP.net的一个功能都不是独立的,它所涉及到的内容可能是好几个知识点,因此,只明白一两个,就去实验,最后吃苦的一定是自己了。
希望给多多积累一些经验。
    <authentication mode="Forms">
       <forms
  loginUrl = "login.aspx"
  protection = "None"
  name  = "WebbUser"
  path  = "/"
  />  
 </authentication>
还要与这个相关。如果你的cookies路径设定的不对,那么可以会签出很多次都不成功。

又测试了一下,总结了以下几个方面的内容:
1、验证问题。不管是采用自己定义的Cookie来验证还是用系统自带的验证,只要验证成功就行了。
2、带路径的Cookie可以设定过期时间。默认的路径为'/',但当你的应用程序与该路径不合时,所有的cookie都为临时的,也就是与浏览器生存期一样的。
3、如果不是长期保存的Cookie,那么设定过期时间是无效的。
4、如果采用自己的Cookie来验证(长期并设定时间),那么使用签出的时候,记得把Cookie的过期时间也修改一下,否则不能成功的签出。

好了,这些是自己瞎琢磨的,不一定对,但我试了很多次,也就这些结论了。


文章来源:http://computer.mblogger.cn/wucountry/posts/46782.aspx

posted on 2005-09-29 17:25  Wu.Country@侠缘  阅读(545)  评论(0编辑  收藏  举报