복붙노트

[REDIS] 세션 타임 아웃은 푸른 레디 스 캐시 세션 상태 제공자에 슬라이딩되지 않는다

REDIS

세션 타임 아웃은 푸른 레디 스 캐시 세션 상태 제공자에 슬라이딩되지 않는다

여러 인스턴스를 통해 웹 응용 프로그램을 확장하면 푸른 구름의 가장 큰 장점 중 하나입니다. 우리는 푸른 레디 스 캐시를 구현하는 웹-역할 클라우드 애플리케이션을위한 여러 VM 지원을 위해. 우리는 세션 상태를 유지 RedisSessionStateProvider 제공자를 사용하고 있습니다. web.config 파일에서 세션 관리에 대한 구성 설정은 다음과 같습니다.

<authentication mode="Forms">
  <forms loginUrl="~/Login" slidingExpiration="true" timeout="20" defaultUrl="~/Default" />
</authentication>
<sessionState timeout="20" mode="Custom" customProvider="MySessionStateStore">
  <providers>
     <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
        host = "dummy.redis.cache.windows.net" 
        port = "6380" 
        accessKey = "dummysecretkey" 
        ssl = "true" 
        throwOnError = "true" 
        retryTimeoutInMilliseconds = "5000" 
        databaseId = "0" 
        applicationName = "" 
        connectionTimeoutInMilliseconds = "5000" 
        operationTimeoutInMilliseconds = "1000" 
        connectionString = ""/>  
  </providers>

우리의 문제는 세션 시간 초과 후 자신의 세션 데이터가 절대 10:20시에 만료됩니다 오전 10시 응용 프로그램에 우리의 사용자가 로그인을 사용자의 포스트 백으로 확장 생각되지 않는 것입니다. 오전 10시 15분에서 사용자의 포스트 백은 다음 세션이 오전 10시 35분에 만료해야하지만, 이런 일이되지 않으면 절대 오전 10시 20분에 만료됩니다.

로그인 버튼의 클릭 이벤트의 코드는 다음과

 protected void Button1_Click(object sender, EventArgs e)
 {
   FormsAuthentication.SetAuthCookie(TextBox1.Text.Trim(), true);
   ConnectionMultiplexer connection = ConnectionMultiplexer.Connec("dummy.redis.cache.windows.net,ssl=true,password=dummysecretkey");
   IDatabase cache = connection.GetDatabase();
   Session["UserName"] = TextBox1.Text;
   Response.Redirect("Default.aspx");
 }

나 슬라이딩 모드에서 세션 시간 초과를 얻기 위해 수행해야 할 것을 알려 수 있다면 감사하겠습니다. 친애하는,

HKR 야다 브

해결법

  1. ==============================

    1.문제를보고 감사를. 우리는보고 된 버그 위의 것을 수정 패키지 RedisSessionStateProvider NuGet의 새 버전을 발표했다.

    문제를보고 감사를. 우리는보고 된 버그 위의 것을 수정 패키지 RedisSessionStateProvider NuGet의 새 버전을 발표했다.

    https://www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/1.5.0

    편집하다: 우리는이 하나 더 문제를 발견했다. ASP.NET AJAX를 요청 ResetItemTimeout를 호출하지 않으며, 세션 타임 아웃을 밀어 다른 세션 상태 방법의 책임이된다. 우리는이 버그를 수정하고 새로운 NuGet 패키지를 발표했다 : https://www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/1.6.5

    이 문제를 해결 여부를 알려 주시기 바랍니다인가?

  2. ==============================

    2.나는 global.asax.cs에서 다음 줄을 포함하여 만료를 슬라이딩의 문제를 해결

    나는 global.asax.cs에서 다음 줄을 포함하여 만료를 슬라이딩의 문제를 해결

    protected void Application_AcquireRequestState()
    {
        if (HttpContext.Current.Session != null)
        {
            RedisSessionStateProvider redis = new RedisSessionStateProvider();
            redis.ResetItemTimeout(HttpContext.Current, HttpContext.Current.Session.SessionID);
        }
    }
    
  3. ==============================

    3.당신은 키 자신을 (당신이 그것을로드 후) 다시 설정해야합니다 :

    당신은 키 자신을 (당신이 그것을로드 후) 다시 설정해야합니다 :

    bool KeyExpire(RedisKey key, DateTime? expiry, CommandFlags flags = CommandFlags.None);
    bool KeyExpire(RedisKey key, TimeSpan? expiry, CommandFlags flags = CommandFlags.None);
    
  4. from https://stackoverflow.com/questions/28292265/session-timeout-is-not-sliding-in-azure-redis-cache-session-state-provider by cc-by-sa and MIT license