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

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["username"] != null)
{ //登陆成功的情况
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", "<script>alert('登录成功!')</script>");
}
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("<script>alert('session到期!');</script>");
}
} #endregion
}
}

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

<httpModules>

        <!--重写IHttpModule类,需要配置的信息-->
<add name="demo" type="JudgeSessionOutTime.Module"/>
<!--type后面是命名空间.类名--> </httpModules>

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

  原理:实现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类即可。

几种判断asp.net中session过期方法的比较的更多相关文章

  1. 判断asp.net中session过期方法的比较

    重写继承page的OnInit()虚方法,在需要的界面上,继承这个类. 1.新建继承page类的类JudgeSession,实现接口成员. 2.重写OnInit()方法,判断session情况. 3. ...

  2. 判断asp.net中session过期的方法

    判断asp.net中session过期的方法 转载自:http://www.cnblogs.com/xilipu31/archive/2013/04/12/3016830.html 方法一:最麻烦也是 ...

  3. asp.net中Session过期设置方法

    在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会 ...

  4. ASP.NET中Session的sessionState 4种mode模式

    1. sessionState的4种mode模式 在ASP.NET中Session的sessionState的4中mode模式:Off.InProc.StateServer及SqlServer. 2. ...

  5. PatentTips -- 一种在CoAP网络中注册的方法及装置

    技术领域 [0001] 本发明涉及一种在CoAP网络中注册的方法及装置,属于网络通信技术领域. 背景技术 [0002] (Internet of Things,物联网)作为新一代的信息技术,越来越受到 ...

  6. House of apple 一种新的glibc中IO攻击方法

    目录 House of apple 一种新的glibc中IO攻击方法 前言 利用条件 利用原理 利用思路 思路一:修改tcache线程变量 思路二:修改mp_结构体 思路三:修改pointer_gua ...

  7. iOS中的过期方法和新的替代方法

    关于iOS中的过期方法和新的替代方法 1.获取某些类的UINavigationBar的统一外观并设置UINavigationbar的背景 注:方法名改了但是基本使用方法不变 + (instancety ...

  8. ASP.NET中的ExecuteNonQuery()方法的用法

    下面我将详细讲解在机房收费系统D层中如何对数据库的增加.删除.修改,最后再来总结一下 ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法: 一.增.删 ...

  9. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

随机推荐

  1. jQuery笔记一

    陆续更新中..... 1,创建标签的时候可以提前写好,以后用clone()方法克隆即可. 如: var div=$("<div></div>"); var ...

  2. 20145218 《Java程序设计》课程总结

    20145218 <Java程序设计>课程总结 每周读书笔记链接汇总 20145218<Java程序设计>第一周学习总结 20145218<Java程序设计>第二周 ...

  3. JavaWeb学习-Tomcat

    打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:

  4. [Hadoop 周边] Hadoop资料收集【转】

    原文网址: http://www.iteblog.com/archives/851 最直接的学习参考网站当然是官网啦: http://hadoop.apache.org/ Hadoop http:// ...

  5. 九度 题目1437:To Fill or Not to Fill

    题目描述: With highways available, driving a car from Hangzhou to any other city is easy. But since the ...

  6. php include

    get_include_path  获取当前 include_path 配置选项的值,在当前代码目录未找到include文件时,则到include_path去include. set_include_ ...

  7. sql server中备份数据的几种方式

    当我们在写sql脚本要对数据表中的数据进行修改的时候,为了防止破坏数据,通常在开发前都会对数据表的数据进行备份,当我们sql脚本开发并测试完成后,再把数据恢复回来. 目前备份数据,我常用的方法有以下几 ...

  8. cordova 5.0 白名单

    最新的cordova 5.0 更新了白名单机制,增强了安全性,但是也给我们在开发中带来了很多问题: 当你引入谷歌.百度地图时,会出现 Failed to load resource -- 解决办法: ...

  9. bzoj 2242: [SDOI2011]计算器

    #include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...

  10. c++自己困惑之处

    1 typedef 可以把类型名重命名. 例如 typedef int my_i; my_i a; a为整型变量. typedef struct node *tree;       struct no ...