HttpContext.Current.Session 在重定向到相同 ASP.Net MVC 应用程序的不同 URL 时重新初始化
HttpContext.Current.Session is reinitialized on redirecting to different URL of same ASP.Net MVC application
我正在开发一个 ASP.Net MVC 应用程序,这个 Web 应用程序托管在 IIS 服务器上,前面有一个流量管理器,因此实际的 Web 应用程序都可以访问该应用程序 URL(appweb1.test.com) 和流量管理器 URL(app.test.com)。如果最终用户点击流量管理器 URL,则在完成身份验证并创建所需的会话变量后,应用程序会将请求重定向到实际的 Web 应用程序 URL。
我面临的问题是,在重定向到同一应用程序的不同页面后,通过流量管理器 URL (app.test.com) 访问应用程序时,身份验证期间设置的会话变量会丢失但有不同的 URL (appweb1.test.com).
我们使用自定义会话状态提供程序作为 Redis 缓存, 配置在 web.config
中
<sessionState mode="Custom" customProvider="RedisSessionStateStore">
<providers>
<add name="RedisSessionStateStore" type="NameSpace.SessionStateProvider" connectionTimeoutInMilliseconds="15000" operationTimeoutInMilliseconds="1000" databaseId="1" />
</providers>
</sessionState>
<httpCookies httpOnlyCookies="true" requireSSL="false" />
如果重定向到同一个 URL,则会话密钥将得到维护。
我还检查了重定向后 SessionId 被更改,这意味着会话对象被重新初始化,这就是所有键值丢失的原因。
为什么即使应用程序服务器相同,会话对象也会丢失。此外,应用程序池的 Max worker Processes 值为 1。
实际上,HttpContext 会话对象是针对URL 创建的,是否指向同一服务器并不重要。所以同一个session对象不能在不同的URL上访问。我必须在重定向到新 URL.
时设置会话对象值
我正在开发一个 ASP.Net MVC 应用程序,这个 Web 应用程序托管在 IIS 服务器上,前面有一个流量管理器,因此实际的 Web 应用程序都可以访问该应用程序 URL(appweb1.test.com) 和流量管理器 URL(app.test.com)。如果最终用户点击流量管理器 URL,则在完成身份验证并创建所需的会话变量后,应用程序会将请求重定向到实际的 Web 应用程序 URL。
我面临的问题是,在重定向到同一应用程序的不同页面后,通过流量管理器 URL (app.test.com) 访问应用程序时,身份验证期间设置的会话变量会丢失但有不同的 URL (appweb1.test.com).
我们使用自定义会话状态提供程序作为 Redis 缓存,
<sessionState mode="Custom" customProvider="RedisSessionStateStore">
<providers>
<add name="RedisSessionStateStore" type="NameSpace.SessionStateProvider" connectionTimeoutInMilliseconds="15000" operationTimeoutInMilliseconds="1000" databaseId="1" />
</providers>
</sessionState>
<httpCookies httpOnlyCookies="true" requireSSL="false" />
如果重定向到同一个 URL,则会话密钥将得到维护。 我还检查了重定向后 SessionId 被更改,这意味着会话对象被重新初始化,这就是所有键值丢失的原因。
为什么即使应用程序服务器相同,会话对象也会丢失。此外,应用程序池的 Max worker Processes 值为 1。
实际上,HttpContext 会话对象是针对URL 创建的,是否指向同一服务器并不重要。所以同一个session对象不能在不同的URL上访问。我必须在重定向到新 URL.
时设置会话对象值