2016-07-24 3 views
1

ASP.NET 웹 사이트에 outputcache를 추가하고 싶습니다. 그러나 사용자가 로그인했는지 여부에 따라 일부 단추와 내용을 변경하는 코드가 있습니다. 나는 그것을 사용하면 로그인 한 사용자의 코드로 페이지를 캐싱 할 수 있습니다. 이것이 작동하는 방식입니까, 아니면 세션과 함께 작동하도록 구성해야합니까?출력 페이지 및 세션 페이지 상태

+0

어떤 기술을 ASP.Net WebForms 또는 ASP.Net MVC를 사용하고 있습니까? – CodeNotFound

+0

@CodeNotFound 웹 양식 –

답변

1

당신은 다음과 같은 변경을 수행해야합니다

이처럼 OutputCache 지침에 VaryByCustom 속성을 추가하고 사용자에게 값을 설정 : 다음

<%@ OutputCache VaryByCustom="User" .... %> 

당신의 Global.asax에 파일에 필요한 이 같은 GetVaryByCustomString 메소드를 오버라이드 (override) 할 :에

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom.Equals("User", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     // Return the user name/login as a value that will invalidate cache per authenticated user. 
     return context.User.Identity.Name; 
    } 
    return base.GetVaryByCustomString(context, custom); 
} 

을 기반으로 이 anwser 아래의 의견, 당신은 세션 변수를 사용하여 사용자가 로그인 여부를 확인하는 말. 그렇게 인증을 관리하는 것이 우수 사례가 아니라고 말씀 드리겠습니다.

솔루션이 세션 값에 따라 캐시를 무효화 할 수있는 방법은이 일을한다 :

다시 VaryByCustom
<%@ OutputCache VaryByCustom="Session" .... %> 

당신이 그것을 string 정말 좋은 의미를 부여하여 원하는 string 값과 미래의 devs하도록 할 수 있습니다 또는 당신이 무엇을하고 있었는지 아는 것.

그런 다음 당신이해야 할 모든 즉

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom.Equals("Session", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     // make sure that the session value is convertible to string 
     return (string)context.Session["Here you put your session Id"]; 
    } 
    return base.GetVaryByCustomString(context, custom); 
} 

우선합니다. 희망이 도움이됩니다.

+0

설명해 주시겠습니까? '사용자'란 무엇입니까? 출력 캐시가 세션과 관련된 작업을 수행한다는 힌트가 있습니까? –

+1

사용자는 캐시와 관련된 모든 문자열이 될 수 있습니다. 여기서 인증 된 사용자 당 캐시를 무효화해야합니다. 그런 다음 "User"(아무것도 될 수 있음) 문자열을 사용하여 캐시 매개 변수 VaryByCustom을 식별합니다. 이 값은 Global.axax의 오버라이드 메소드'GetVaryByCustomString'에 전달됩니다. 이 방법에서는 사용자에게 변경된 내용이 있는지 캐시에 알려줍니다. – CodeNotFound

+0

로그인 한 사용자가 아닌 캐시 페이지를 제공하는 옵션이 있습니까? ASP.NET 로그인에서 빌드를 사용하지 않고 직접 구현했으며 사용자가 로그인했는지 여부를 확인하기 위해 세션 변수를 설정 했습니까? –