2011-09-17 193 views
2

目前,我們正在使用Cookie會話通過Web.Config中更改會話狀態提供動態

<sessionState cookieless="true" /> 

當你先打個網頁會做一個重定向到自身和軋液的URL包括會話ID。

我的第一個問題是:對於某些頁面可以避免這種情況?我正在嘗試更改會話狀態提供程序,如果頁面名稱= XXXXX。我需要它只顯示沒有重定向的頁面。

第二個問題是:有沒有辦法在Global.asax中將會話提供程序從Custom切換爲SQL。在某些情況下,我們需要使用其他我們需要Custom的SQL。

我試圖在在session_start但沒有運氣改變在Global.asax的SessionStateModeSQL。有任何想法嗎?

編輯

至於我的第一個問題我已經找到了一個Page指令,將這樣的伎倆

EnableSessionState="false" 

我還需要弄清楚如何更換供應商在Global.asax

要展開我們正在使用無cookie會話,但我們正在切換到自定義提供程序(狀態服務器)。如果服務器不可用,我們需要自動故障轉移到SQL。

回答

2

全局事件Session_Start發生在會話初始化後。如果您需要在此之前進行更改,則必須先掛鉤以前的活動,例如AcquireRequestState

這裏是關於使用HTTP模塊定製會話狀態的a talk from Tech Days Hyderabad。它建議SetSessionStateBehavior但它只允許您啓用/禁用會話狀態,而不是切換提供程序。

看起來你可以修改自定義提供程序來讀取SQL狀態。這裏有一篇關於如何manually decode session state的文章。這可能將無法生存在.NET雖然版本的變化,

+0

感謝您的信息! – CameraCard

5

看起來你的答案就在這裏

在Global.asax中把

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    Configuration config; 
    config = WebConfigurationManager.OpenWebConfiguration("~"); 
    SessionStateSection SessionState = config.GetSection("system.web/sessionState") as SessionStateSection; 

    if (SessionState != null) 
    { 
    SessionState.Mode = System.Web.SessionState.SessionStateMode.InProc; 
    //SessionState.Mode = (SessionStateSection)"Mode=InProc"; 
    //(SessionStateSection)"Inproc"; 
    config.Save(); 
    } 
} 

http://www.totaltechnet.com/UpdateConfig/UpdateConfig.htm

編輯:我的壞。它看起來像這實際上寫入新的值web.config

+1

是的,但它仍然可以使用,只要您檢查代碼是否需要更改web.config。沒有這樣的檢查,應用程序將繼續進行回收,因爲每次更改web.config時都會重新啓動。 –