1. 程式人生 > >實現Session 過濾的三種方式

實現Session 過濾的三種方式

第一種方式:使用HttpModule實現過濾Session功能
新建一個HttpModuleHelper 工具類, 繼承 IHttpModule介面 程式碼如下

 public class HttpModuleHelper : IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            context.AcquireRequestState += Context_AcquireRequestState;
        }
        //在管道中的 AcquireRequestState的事件中 新增一個方法
private void Context_AcquireRequestState(object sender, EventArgs e)//Session過濾器 { HttpApplication app = (HttpApplication)sender;//獲得 HttpApplication物件 HttpContext context = app.Context;//獲得HttpContext物件 string url = context.Request.Url.ToString();//獲得url
if (url.Contains("AdminPage"))//如果這個要求訪問的url在管理員介面中 則要求驗證Session是否登入 { if (context.Session["userInfo"] == null)//如果沒登入 直接跳轉到登入介面 { context.Response.Redirect("/2015-02-27/Login.aspx"); } } } }

然後在web.config中配置 程式碼如下

<system.webServer>
    <modules>
      <add name="HttpModuleHelper" type="Project.Common.HttpModuleHelper"/>
    </modules>
  </system.webServer>

3:執行的原理.
當創建出HttpApplication時,會執行一系列方法,最後會將Web.config檔案中關於HttpModule的配置資訊讀取一個集合中(這裡麵包含的HttpModule有程式設計師自己定義,也有系統的定義)。最後遍歷集合,將集合中每個HttpModule取出來,並且執行其中的Init方法。程式碼如下:

        int count = this._moduleCollection.Count;
    for (int i = 0; i < count; i++)
    {
        this._currentModuleCollectionKey = this._moduleCollection.GetKey(i);
        this._moduleCollection[i].Init(this);//執行HttpModule中的Init方法,其中也包含了我們自己定義的CheckSessionModule中的Init方法。
    }

我們自己定義的CheckSessionModule中的Init方法,主要完成了對請求管道中第九個事件的註冊.
public void Init(HttpApplication context)
{
//URL重寫。
context.AcquireRequestState+=context_AcquireRequestState;
}
當集合遍歷完成以後,開始進入管道了,從管道中的第一個事件開始執行,當走到第9個事件,該事件觸發,執行我們自己寫的 public void context_AcquireRequestState(object sender, EventArgs e)方法。

第二種方式: 建立一個工具類 這個類繼承 System.Web.UI.Page 類
再該類中過濾Session

public class CheckSession:System.Web.UI.Page
    {
        private void Page_Init(Object sender,EventArgs e)
        {
            if (Session["UserInfo"] == null)
            {
                Response.Redirect("/2015-02-27/Login.aspx");
            }
        }
    }

然後將需要過濾的頁面不繼承Page類而繼承這個自定義類

public partial class TestSession : Common.CheckSession  //繼承自定義的類
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

第三種方法:使用Global檔案中的 Application_AcquireRequestState 方法來過濾 Session

相關推薦

javascript實現繼承的方式

定義 數列 .net 一個數 str www div name type屬性 一、原型鏈繼承 function Parent(){} function Child(){} Child.prototype = new Parent(); 通過對象child的p

struts2使用session方式

1、通過上下文,從ActionContext中獲取 ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); 2、實現SessionAware介面

實現Servlet的方式(與GenericServlet、HttpServlet的關係)

WEB伺服器可以存放資料,他是一個“容器”,作用是接收使用者的請求,再對這個請求做出相應。 Java的Web伺服器必須要支援JSP/Servlet(作為JSP/Servlet的容器)。 所以JSP/Servlet就是JavaWeb伺服器的一套規範。 所以要進行J

Java實現克隆的方式

1. 淺克隆      2. 深克隆     3. 利用序列化實現深克隆 1、淺複製(淺克隆)這種淺複製,其實也就是把被複制的這個物件的一些變數值拿過來了。最後生成student2還是一個新的物件。 public class

python核心高階學習總結3-------python實現程序的方式及其區別

python實現程序的三種方式及其區別 在python中有三種方式用於實現程序 多程序中, 每個程序中所有資料( 包括全域性變數) 都各有擁有⼀份, 互不影響 1.fork()方法 ret = os.fork() if ret == 0: #子程序 else:

ionic:實現滑動的方式

1 前言   在移動端受螢幕大小所限,展示內容很多的時候,就要使部分割槽域進行滑動。本文展示專案中所有到的幾種方式,大家可以看自己的需求選擇合適的滑動方式。實現滑動的基本原理,有兩個容器A、B,假如A在外層,B在內層;外層的A寬度或高度固定,內層容器B

JavaScript面向物件()——繼承與閉包、JS實現繼承的方式

  前  言 JRedu 在之前的兩篇部落格中,我們詳細探討了JavaScript OOP中的各種知識點(JS OOP基礎與JS 中This指向詳解 、 成員屬性、靜態屬性、原型屬性與JS原型鏈)。今天我們來繼續探討剩餘的內容吧。  我們都知道,面向物件的三大特徵——封裝、繼承、多型。 封裝無非就是屬性和

Struts2獲取Session方式

1、Map<String,Object> map =  ActionContext.getContext().getSession();2、HttpSession session = ServletActionContext.getRequest().getSes

【我的Java筆記】多執行緒_多執行緒實現的第方式(執行緒池)

Executors(工廠類) 方法:public static ExecutorService newFixedThreadPool(int nThreads)指定線上程池中多少條執行緒 注:此方法

實現Servlet的方式

一、實現Servlet介面 //實現servlet方法開發servlet package com.hpu.ych; import java.io.*; import javax.servlet.*; public class Hello implements Servl

程式設計實現簡訊傳送方式

2014年09月05日⁄ 綜合⁄ 共 3138字 ⁄ 字號 小 中 大 ⁄ 評論關閉 方案一: 利用sina webservice傳送簡訊 通過程式設計實現簡訊息的傳送是一件比較繁瑣的事情,目前,解決方法是通過計算機和手機的連線,使用手機程式語言編寫相關的簡訊程式來實硬體

.net 中dapper實現事務的方式總結

一個數 begin 單機 操作 不同 三種方式 ransac 方法 數據庫事務 .net 中實現事務查詢的三種方式 1.TransactionScope 通過創建TransactionScope 對象然後包裹connection對象執行相關查詢操作,完成 此種

實現Session 過濾方式

第一種方式:使用HttpModule實現過濾Session功能 新建一個HttpModuleHelper 工具類, 繼承 IHttpModule介面 程式碼如下 public class HttpModuleHelper : IHttpModule

Java多線程實現方式

get() warning 三種方式 方式 緩存 運行 了解 ren ava Java多線程實現方式主要有三種:繼承Thread類、實現Runnable接口、使用ExecutorService、Callable、Future實現有返回結果的多線程。其中前兩種方式線程執行完後

JAVA實現Base64編碼的方式

ack ons static nts bstr clas [] ram trace 摘要: Javabase64編碼的三種方式 有如下三種方式: 方式一:commons-codec.jar Java代碼 1. String base64String="whuang12

前端動畫效果實現方式

near 動畫效果 timeout css屬性 轉移 動畫 sla 三種方式 內存 第一種,js中setTimeout和setintervel,把動畫元素設置position:absalute,然後操作left、top來移動。此種方法內存消耗大,顯示效果差,不推薦。 第二種

nginx反代httpd,實現tomcat代理模型至後端的tomcat服務器,會話綁定的方式

httpmod_jkajp 會話綁定 構建tomcat集群,實現前端一臺nginx反代,到後端的apache服務器,由apache負責向後端的tomcat服務器進行資源調度,這樣的模式比直接用nginx反代到後端主機,tomcat服務器所受到的壓力會更小,服務將會更加穩定,這樣的模式是經過實踐檢驗出來的。如

在ABAP裏實現條件斷點的方式

png abap ble 公眾 動態 觀察 創建 oop 不可 背景 有不同的同事問我這個問題:例如下圖的LOOP要執行1000次,我只對其中的某一次比如第501次循環感興趣,我肯定不可能按500次F5然後進入第501次的調試。或者我只對LOOP裏某個變量為某一個具體值的那

Java設置session超時(失效)的方式 設置session的有效時間

tag modify cli plain time web.xml ati -h value 1. 在web容器中設置(此處以tomcat為例) 在tomcat-5.0.28\conf\web.xml中設置,以下是tomcat 5.0中的默認配置: [ht

HTML實現滾動到頂部的方式

HTML實現滾動到頂部的三種方式通過body.scrollTop(推薦): document.body.scrollTop = 0 通過元素的scrollIntoView()方法: ele.scrollIntoView() 通過內部鏈接: <a href="#top">滾動到頂部</a>