zoukankan      html  css  js  c++  java
  • 判断asp.net中session过期的方法

    方法一:最麻烦也是最容易想到的方法,在每个页面的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类即可。

    作者:枫上善若水
    出处:http://www.cnblogs.com/xilipu31/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/xilipu31/p/3016830.html
Copyright © 2011-2022 走看看