ITPUB??ì3
ITPUB论坛 » Web开发 » ASP.NET与AJAX » 需要两次刷新才能清空session的问题!

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 需要两次刷新才能清空session的问题!
离线 mxd061203
初级会员



精华贴数 0
个人空间 0
技术积分 122 (14239)
社区积分 0 (1203299)
注册日期 2006-12-8
论坛徽章:0
      
      

发表于 2006-12-12 15:13 
需要两次刷新才能清空session的问题!

遇到个问题:
为防止用户通过在地址栏输入地址而绕过登录,我在Login.aspx中写下如果登陆成功则Session["Logined"] = "true",然后在其它页面的Page_Load中判断
if (Session["Logined"] ==null)
           {
               Response.Redirect("Login.aspx";
           }
通过每一页的注销按钮导航到LoginOut.aspx页面,并在LoginOut.aspx页面的Page_Load中写下
        Session.Remove(""Logined"]";//.clear也试了
        Response.Redirect("Login.aspx";
--------------------------
出现的问题是:
点击注销按钮后导航到Login.aspx后,在地址栏输入其它页地址如Index.aspx后照样可以进入该页,但点击刷新按钮后又会跳转到Login.aspx页,此时再输入其它页地址就进不去了,这是怎么回事?


只看该作者    顶部
离线 zly526
一般会员



精华贴数 0
个人空间 0
技术积分 196 (9598)
社区积分 0 (1203267)
注册日期 2006-12-7
论坛徽章:1
开发板块每日发贴之星     
      

发表于 2006-12-12 15:14 
这种应用的话
最好还是写一个页面基类,在页面基类的Page_Load里面写验证是否登陆
之后添加什么页面就不用再写这样的代码了,改起来也方便

还可以利用Application_AuthenticateRequest来做这个事情


只看该作者    顶部
离线 mxd061203
初级会员



精华贴数 0
个人空间 0
技术积分 122 (14239)
社区积分 0 (1203299)
注册日期 2006-12-8
论坛徽章:0
      
      

发表于 2006-12-12 15:15 
楼上高手,这个页面基类怎么写呀?我很菜!谢谢!


只看该作者    顶部
离线 zly526
一般会员



精华贴数 0
个人空间 0
技术积分 196 (9598)
社区积分 0 (1203267)
注册日期 2006-12-7
论坛徽章:1
开发板块每日发贴之星     
      

发表于 2006-12-12 15:16 
整个验证的流程有问题。
不应该依靠Session进行验证。
在web.config中设置验证方式:

<authentication mode="Forms">
      <forms loginUrl="..." name="..." protection="..." path="..." timeout="30" enableCrossAppRedirects="true"/>
</authentication>

具体参见msdn


只看该作者    顶部
离线 mm_xlhy123
一般会员



精华贴数 0
个人空间 0
技术积分 90 (18036)
社区积分 0 (1206402)
注册日期 2006-12-7
论坛徽章:0
      
      

发表于 2006-12-12 15:17 
你看到的Index.aspx是缓存页面,在所有页面里的Page_Load里加上:

        Response.Expires = 0;
        Response.Cache.SetNoStore();
        Response.AppendHeader("Pragma", "no-cache";


只看该作者    顶部
离线 mxd061203
初级会员



精华贴数 0
个人空间 0
技术积分 122 (14239)
社区积分 0 (1203299)
注册日期 2006-12-8
论坛徽章:0
      
      

发表于 2006-12-12 15:19 
问题已解决,感谢mm_xlhy123 !同样也感谢其它参与的大虾!
解决的方法就是fangxinggood(JustACoder)所说的在每个需要验证的页面Page_Load里写下
Response.Expires = 0;
        Response.Cache.SetNoStore();
        Response.AppendHeader("Pragma", "no-cache";
everything will be ok!


只看该作者    顶部
离线 mm_xlhy123
一般会员



精华贴数 0
个人空间 0
技术积分 90 (18036)
社区积分 0 (1206402)
注册日期 2006-12-7
论坛徽章:0
      
      

发表于 2006-12-12 15:19 
这三句话其实就是让客户端不缓存该页面,每次都在服务端重新请求~

Response.Expires ==> 设置过期时间
Response.Cache.SetNoStore() ==> 在服务端不缓存该页
Response.AppendHeader("Pragma", "no-cache" ==> 在客户端不缓存~


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问