• 判断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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!
  • 相关阅读:
    苏州大学2017年复试试题
    四川大学2019年复试试题
    四川大学2009年复试试题
    华东师范大学2019年复试试题
    华东师范大学2018年复试试题
    华东师范大学2017年复试试题
    华东师范大学2016年复试试题
    中国科学院大学2020年高等代数考研试题
    中国科学院大学2020年数学分析考研试题
    中国科学技术大学2020年高等代数考研试题
  • 原文地址:https://www.cnblogs.com/xilipu31/p/3016830.html
Copyright © 2020-2023  润新知