2016-07-24 6 views
1

ASP.NET Webサイトにoutputcacheを追加します。しかし、ユーザーがログインしているかどうかに基づいて、いくつかのボタンとコンテンツを変更するコードがあります。私はそれを使用すると、ログインしたユーザーのコードでページをキャッシュすることがあります。これはどのように動作するのですか、それともセッションで動作するように設定する必要がありますか?出力ページとセッションページの状態

VaryByCustom属性を追加して、このようなあなたのOutputCacheディレクティブでユーザーにその値を設定します:

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

次に、必要なあなたのGlobal.asaxのファイルにあなたは以下の変更を行う必要があり

+0

ASP.Net WebFormsまたはASP.Net MVCを使用しているテクノはどれですか? – CodeNotFound

+0

@CodeNotFound webforms –

答えて

1

次のようにGetVaryByCustomStringメソッドをオーバーライドします。

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値であることと、将来の開発者をさせることができますあなたがしていたことを知ることができます。

次にあなたがする必要があるすべてである

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

あなたはそれが何をしているか説明してもらえますか? 'User'とは何ですか?出力キャッシュがセッションに関連する何かを行うことを示唆していますか? –

+1

ユーザーには、キャッシュに関連する任意の文字列を使用できます。ここでは、認証されたユーザーごとにキャッシュを無効にする必要があります。次に、文字列「User」(何でも構いません)を使用して、キャッシュ・パラメータVaryByCustomを識別します。この値は、Global.axaxのオーバーライドされたメソッドGetVaryByCustomStringに渡されます。その方法では、ユーザーに変更があったかどうかを確認するようキャッシュに指示します。 – CodeNotFound

+0

ログインしているユーザーにキャッシュ以外のページを提供するオプションはありますか?私はASP.NETのログインでビルドを使用しない、私は自分自身を実装し、ユーザーがログインしているかどうかを確認するセッション変数を設定しますか? –

関連する問題