注销时未调用Session_start - >使用azure redis缓存登录会话状态

时间:2014-09-17 12:35:59

标签: asp.net-mvc azure authorization session-state azure-redis-cache

当MS宣布将共享缓存替换为新的azure redis缓存时,我已根据this迁移了我的应用程序以使用redis缓存而不是azure共享缓存

现在我面临一个问题,即注销 - >登录它不会调用session_start方法,我的应用程序将设置值以及用户对象,如活动(用户可以执行)和其他一些。

当我使用inproc会话状态或之前的azure共享缓存时,然后在logout-> gt登录时,它会调用 logoutcallback()>> session_start()>> AuthorizeCore()但是使用redis缓存会调用 logoutcallback()>> AuthorizeCore(),我无法弄清楚这里有什么问题?

退出&登录代码如下

public void Logout()
        {
            //redirect url
            var RedirectUrl = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Url.RouteUrl("Default", new { controller = "Account", action = "LogoutCallback" }));

            //logout
            WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
            string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, RedirectUrl, null));


            Response.Redirect(signoutUrl, true);
        }

        [AllowAnonymous]
        public void LogoutCallback()
        {
            Session.Abandon();            
            Response.Redirect(Url.Content("~/"), true);
        }

和我的web.config设置如下,用于会话状态的redis配置

<sessionState mode="Custom" customProvider="MySessionStateStore" >
      <providers>              
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="[my host]" accessKey="[my key]" ssl="true"  operationTimeoutInMilliseconds = "1200000" connectionTimeoutInMilliseconds = "1200000"/>
      </providers>
    </sessionState>

感谢。

1 个答案:

答案 0 :(得分:0)

我们无法重现这个问题。您能给我们一个可重现的网络应用程序,我们可以用它来进一步调查吗?