【问题标题】:Change Session State Provider dynamically动态更改会话状态提供者
【发布时间】:2011-11-19 04:31:30
【问题描述】:

我们目前正在通过 Web.Config 使用无 cookie 会话

<sessionState cookieless="true" />

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

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

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

我尝试在 Session_Start 的 Global.asax 中将 SessionStateMode 更改为 SQL,但没有成功。有什么想法吗?

编辑

至于我的第一个问题,我找到了一个可以解决问题的页面指令

EnableSessionState="false"

我仍然需要弄清楚如何在 Global.asax 中切换供应商

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    看来你的答案就在这里

    在 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 中写入了新值

    【讨论】:

    • 是的,但它仍然应该是可用的,前提是您签入代码是否需要更改 web.config。如果没有这样的检查,应用程序将继续循环,因为每次更改 web.config 时它都会重新启动。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 2015-09-08
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2020-09-05
      • 2011-06-09
      • 2016-04-16
      相关资源
      最近更新 更多