做asp.net应用程序的都应该碰到一个问题,Session丢失,需要自动跳转到登录页面。
比如你的项目了有N个页面,难道每个页面的Onload事件里都去写上 if(session["user"]==null){...your is code...}吗?
如果不写,只在主界面,如Default.aspx页面上写,那么我直接访问你项目里的 www.xxx.com/xxx/xxx/xxx.aspx;这个时候你的程序会自动跳转到登录界面吗 ????
答案肯定不是。于是百度了一把,发觉也没什么答案,有个basepage.cs类。意思就是写一个类来判断session状态,然后每个页面都去继承这个类。
这,据说是最简洁的办法了????但是问题还是存在,我不想在我每个新建的aspx页面都去写一次继承,虽然只写简单的:basepage,但是我用的基本是AJAX技术,后台代码我根本不关心的,此时怎么办呢 ?大家先讨论下,5楼放出我自己的做法。
比如你的项目了有N个页面,难道每个页面的Onload事件里都去写上 if(session["user"]==null){...your is code...}吗?
如果不写,只在主界面,如Default.aspx页面上写,那么我直接访问你项目里的 www.xxx.com/xxx/xxx/xxx.aspx;这个时候你的程序会自动跳转到登录界面吗 ????
答案肯定不是。于是百度了一把,发觉也没什么答案,有个basepage.cs类。意思就是写一个类来判断session状态,然后每个页面都去继承这个类。
这,据说是最简洁的办法了????但是问题还是存在,我不想在我每个新建的aspx页面都去写一次继承,虽然只写简单的:basepage,但是我用的基本是AJAX技术,后台代码我根本不关心的,此时怎么办呢 ?大家先讨论下,5楼放出我自己的做法。
http://www.cnblogs.com/csjackie/archive/2008/11/03/1325760.html?login=1
membership 是神马能详细说下怎么处理的吗 ?其实目标很简单,就是检测Session丢了 ,然后跳到登录界面,就算完
开始也是写了个basepage的类,结果刚写好,问题就来了。我的项目下面有100多个页面,,,,尼玛哦我要怎么写继承?每个页面去写一次,写到最后肯定是哪个页面继承了,哪个页面没有继承,我自己都不知道了。于是我想到了用Global.asax。这个全局配置文件,平常也没怎么关心他,这时候看它却是如此可爱了。
新建一个Global.asax文件,默认的事件里,看了一遍,没有一个适合做这个判断Session状态的,有些事件是在session_start之前的,那时候session还不可以用,根本无法作判断。于是找了一下,找到一个事件。
Application_PreRequestHandlerExecute
这个事件的解释是。在 ASP.NET 页面框架开始执行诸如页面或 Web 服务之类的事件处理程序之前,该事件被触发。就是每次我们以一个a标签的形式请求服务器,它都会被触发。于是 我就动手写了。
if(session["userid"]==null)
{
Response.Write("<script>window.top.location.href='http://" + HttpContext.Current.Request.Url.Host + "/User/Login.aspx'</script>");
}
都要面临授权的问题
你不关心后台代码,或者说你不关心验证,那么授权那后台代码才是关键,除非你不负责推荐看下asp.net的几种验证机制,aop的权限校验
http://www.cnblogs.com/cuishao1985/archive/2009/09/25/1574148.html
string thisurl = HttpContext.Current.Request.FilePath.Substring(HttpContext.Current.Request.FilePath.LastIndexOf("/") + 1);
//得到当前的页面名称。然后来判断如果页面不是登录页面,并且session为空,才执行跳转。
if (thisurl != "Login.aspx" && Session["userid"] == null)
{
Response.Write("<script>window.top.location.href='http://" + HttpContext.Current.Request.Url.Host + "/User/Login.aspx'</script>");
}这时,问题就解决了。无需写basepage类,无需每个页面都去继承。我想这个办法应该是最简单了的吧。
www.xxx.com
或者直接去访问 www.xxx.com/xxx/xxx/xxx.aspx ,都能跳转了。