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类即可。

  • 相关阅读:
    每天进步一点点之查找
    每天进步一点点之堆栈思想
    每天进步一点点之大端存储和小端存储
    每天进步一点点之线性表的考察
    每天进步一点点之出栈顺序考点
    React Native 混合开发与实现
    谈谈JavaScript异步代码优化
    谈谈前端异常捕获与上报
    vue插件编写与实战
    vue项目构建与实战
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/5231163.html
Copyright © 2011-2022 走看看