动态更改会话状态提供程序

时间:2011-09-17 08:15:43

标签: c# asp.net

我们目前正在通过Web.Config

使用cookieless会话
<sessionState cookieless="true" />

当您第一次点击网页时,会重定向到自己并修改网址以包含会话ID。

我的第一个问题是:对于某些页面可以避免这种情况吗?如果页面名称= XXXXX,我正在尝试更改会话状态提供程序。我需要它才能显示没有重定向的页面。

第二个问题是:有没有办法在Global.asax中将Session提供程序从Custom切换到SQL。在某些情况下,我们需要使用其他需要自定义的SQL。

我已尝试在Session_Start中更改Global.asax中的SessionStateModeSQL,但没有运气。有什么想法吗?

修改

关于我的第一个问题,我找到了一个可以解决问题的Page Directive

EnableSessionState="false"

我仍然需要弄清楚如何在Global.asax

中切换提供程序

扩展我们目前正在使用无cookie会话,但我们正在切换到自定义提供程序(State Server)。如果服务器不可用,我们需要自动故障转移到SQL。

2 个答案:

答案 0 :(得分:5)

看起来你的答案就在这里

在global.asax put

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 :(得分:2)

全局事件Session_Start在会话初始化后发生。如果您需要在此之前进行更改,则必须挂钩之前的事件,例如AcquireRequestState

这是关于使用HTTP模块自定义会话状态的a talk from Tech Days Hyderabad。它建议SetSessionStateBehavior,但这只允许您启用/禁用会话状态,而不是切换提供程序。

看起来您可以修改自定义提供程序以读取SQL状态。这是关于如何manually decode session state的帖子。然而,这可能无法在.NET版本的更改中存活下来,