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

本文关键字:程序 会话状态 动态 | 更新日期: 2023-09-27 18:08:46

我们目前通过Web使用无cookie会话。配置

<sessionState cookieless="true" />

当你第一次点击一个网页时,它会重定向到它自己,并修改URL以包含会话id。

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

第二个问题是:是否有一种方法来切换会话提供程序从自定义到SQL在Global.asax。在某些情况下,我们需要使用SQL,而在其他情况下,我们需要自定义。

我已经尝试在全局中将SessionStateMode更改为SQL。asax在Session_Start,但没有运气。什么好主意吗?

编辑

关于我的第一个问题,我发现了一个页面指令,将做的伎俩

EnableSessionState="false"

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

中切换提供商

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

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

看来你的答案在这里

在全球。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

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

这是来自Tech Days Hyderabad的一个关于使用HTTP模块定制会话状态的演讲。它建议使用SetSessionStateBehavior,但它只允许您启用/禁用会话状态,而不允许切换提供商。

看起来你可以修改你的自定义提供程序来读取SQL状态。这里有一篇关于如何手动解码会话状态的文章。但这可能无法在。net版本中存活,