2011-09-17 141 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时都会重新启动。 –