我们目前正在通过Web.Config
使用cookieless会话<sessionState cookieless="true" />
当您第一次点击网页时,会重定向到自己并修改网址以包含会话ID。
我的第一个问题是:对于某些页面可以避免这种情况吗?如果页面名称= XXXXX,我正在尝试更改会话状态提供程序。我需要它才能显示没有重定向的页面。
第二个问题是:有没有办法在Global.asax中将Session提供程序从Custom切换到SQL。在某些情况下,我们需要使用其他需要自定义的SQL。
我已尝试在Session_Start中更改Global.asax中的SessionStateMode
到SQL
,但没有运气。有什么想法吗?
修改
关于我的第一个问题,我找到了一个可以解决问题的Page Directive
EnableSessionState="false"
我仍然需要弄清楚如何在Global.asax
中切换提供程序扩展我们目前正在使用无cookie会话,但我们正在切换到自定义提供程序(State Server)。如果服务器不可用,我们需要自动故障转移到SQL。
答案 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版本的更改中存活下来,