博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断asp.net中session过期的方法
阅读量:6435 次
发布时间:2019-06-23

本文共 3140 字,大约阅读时间需要 10 分钟。

转载自:http://www.cnblogs.com/xilipu31/archive/2013/04/12/3016830.html

方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断:

protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                if (Session["username"] != null)                {                    //登陆成功的情况                    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "");                }                else                {                    //过期,重新登录                    Response.Redirect("LoginForm.aspx");                }            }        }

    缺点:代码冗余,重复写判断session代码。

 

方法二:重写HttpModule中的Init()方法,然后判断session过期情况。

  1.新建一个继承IHttpModule接口的类Module ,让Module类实现IHttpModule接口成员。

  2.在Init()方法中对Context进行注册AcquireRequestState事件。

  3.在AcquireRequestState方法中实现判断session代码。

 

 

using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace JudgeSessionOutTime{    //1.继承IHttpModule类,实现接口成员    public class Module:IHttpModule    {        #region IHttpModule 成员        public void Dispose()        {            throw new NotImplementedException();        }        //2.在Init()方法中对Context进行注册AcquireRequestState事件。        public void Init(HttpApplication context)        {            context.AcquireRequestState+=new EventHandler(context_AcquireRequestState);        }        //3.完善AcquireRequestState方法,然后判断session过期        public void context_AcquireRequestState(object sender, EventArgs e)        {            HttpApplication app = (HttpApplication)sender;            if (app.Context.Session["username"] == null)            {                app.Response.Write("");            }        }        #endregion    }}

  4.配置web.config文件,在<system.web>中添加以下代码

  优点:效率高,代码无冗余,一次配置,全程受用。

  原理:实现IHttpModule接口的类Module是在执行页面之前就会执行。即:在page_load()事件执行之前,就会执行 Module,然后执行判断session方法,未过期,继续执行,过期,就会执行相应操作,就不用执行page_load()页面的方法了。

  感悟:说实话,对于这点,在做网站登录,然后判断用户名方面,我觉得不太适合,因为,一旦程序开始加载,就会执行module类方法,那时候session还是空,所以无论怎样,都不会放下走,一直停在登录界面(个人见解,欢迎各位拍砖!)

 

方式三:重写继承page的OnInit()虚方法,在需要的界面上,继承这个类。

  1.新建继承page类的类JudgeSession,实现接口成员。

  2.重写OnInit()方法,判断session情况。

  3.在需要判断session过期情况的页面上,继承该JudgeSession类,而不是page类,从而实现效果。

//JudgeSession 类using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;namespace JudgeSessionOutTime{    public class JudgeSession : System.Web.UI.Page    {        protected override void OnInit(EventArgs e)        {            if (Session["username"] == null)            {                Response.Write("session过期!");            }            else            {                Response.Write("session没有过期,用户名:"+Session["username"].ToString());            }        }    }}

  优点:方法灵活,代码重用率高。在需要判断session的页面继承JudgeSession类,不需要的页面,继承page类即可。

你可能感兴趣的文章
polay定理总结
查看>>
IIS如何配置可以下载APK、IPA文件
查看>>
CodeForces 396C 树状数组 + DFS
查看>>
[sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...
查看>>
远程桌面退出全屏/不能全屏/全屏切换的技巧
查看>>
【Java】Float计算不准确
查看>>
mybatis在xml文件中处理大于号小于号的方法
查看>>
Codeforces Codeforces Round #319 (Div. 2) A. Multiplication Table 水题
查看>>
各大浏览器CSS Hack收集
查看>>
再谈 $* 和 $@ 在 Bash 中的表现
查看>>
Apache Commons工具集简介
查看>>
关于0基础磁盘管理(gpt UEFI...)最好的一篇文章(来自gentoo linux)
查看>>
CodeSmith 基础用法和例子
查看>>
[转]SSH反向连接及Autossh
查看>>
Wikioi 1081 线段树成段更新单点查询
查看>>
c#调用cmd
查看>>
[转]Newtonsoft JSON how to dynamically change the date format?
查看>>
双机/RAC/Dataguard的区别【转】
查看>>
数据挖掘算法学习(四)PCA算法
查看>>
mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)...
查看>>