日期:2014-05-17  浏览次数:20428 次

为什么asp.net Page_Load 有时候不发生,现象帖子中详述
为了保证不允许没有权限的人非法访问页面,我每个页面都在Page_load中验证身份,如下:

        if (Session["ClientType"] ==null)
        {
            CommFiles.Alert(this, "你还没有登录,请先登录!", "default.aspx");
            return;
        }

        if (Session["ClientType"].ToString() != "管理员")
        {
            CommFiles.Alert(this, "你没有权限访问该页面,请用管理员帐号重新登录!", "default.aspx");
            return;
        }


通过导航跳转等各种方式进入页面时都会执行Page_Load进行验证,权限不对就跳转到登录页面重新登录,但是如果曾经用有权限的帐号登录过这个页面,然后换没权限的帐号登录,从地址栏直接输入这个页面的地址,就可以直接进入这个页面,不发生Page_load事件,为什么?怎么处理?
------最佳解决方案--------------------
退出时清空页面缓存和Session了没?
------其他解决方案--------------------
我怎么觉得,没发生Page_load就是没发送request到服务器,Browser Cache页面了?
------其他解决方案--------------------
输出 Session["ClientType"] 看看是什么
------其他解决方案--------------------
切换用户时,就把session清空。
------其他解决方案--------------------
或者登录后立马清空一次session,再保存本次的用户信息
------其他解决方案--------------------
你在页面中右键 然后刷新试试试
如果能Page_load的话,应该是ie的缓存的问题
在Page_Load里加一句
Response.Cache.SetCacheability(HttpCacheability.NoCache);
这是强制触发的  

又或者是你Cache的值设置太大了,所以间隔的时间太长了,你设置小点 
------其他解决方案--------------------
如果是在同一浏览器的不同tab,用ajax判断Session。

如果是同一浏览器的单开浏览器,不知道会不会有你说的这个情况?
------其他解决方案--------------------
都不发生Page_load,怎么看?其实不用看也知道,是我想要的值,只是不能验证,没法阻止页面被打开。
------其他解决方案--------------------
三楼四楼的说法比较靠谱,不过我是ASP新人,不懂这么多,Session在退出时我执行了Clear了,页面缓存怎么清啊?还有,我不能保证别人使用时一定会点我的退出按钮啊
------其他解决方案--------------------
浏览器缓存页面是正常行为啊,我怎么保证不管用户用什么方式进入页面,都发生Page_Load呢?
------其他解决方案--------------------
你们好多人说的Session的问题,现在的问题是PageLoad不执行,我没法判断Session

刷新的话可以执行PageLoad,跳转,连接,导航的什么方式都好,都会执行PageLoad,只有在浏览器直接输入地址,不执行PageLoad
------其他解决方案--------------------
我没有机会判断Session哦,楼上的朋友。