主页 > 知识库 > 几种判断asp.net中session过期方法的比较

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

热门标签:Linux服务器 团购网站 科大讯飞语音识别系统 银行业务 Mysql连接数设置 电子围栏 阿里云 服务器配置

方法一:最麻烦也是最容易想到的方法,在每个页面的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 BasePage类+Session通用用户登录权限控制
  • IIS服务器中 ASP.NET State Service 开启后 Session 仍容易丢失的问题终极解决办法
  • ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码
  • 在ASP.NET中,设置Session的过期时间的方法
  • ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法
  • asp.net中Session缓存与Cache缓存的区别分析
  • Asp.net在ashx文件中处理Session问题解决方法
  • ASP.NET中在一般处理程序中使用session的简单介绍
  • ASP.NET ASHX中获得Session的方法
  • ASP.NET 使用application与session对象写的简单聊天室程序
  • ASP.NET在底层类库中获取Session C#类中获取Session

标签:衡水 江苏 衢州 蚌埠 枣庄 大理 广元 萍乡

巨人网络通讯声明:本文标题《几种判断asp.net中session过期方法的比较》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266