2012-04-11 18 views
2

私は利用規約に同意する必要があり、おそらくその値をクッキーに保存する必要があるサイトの利用規約ページを実装したいと思います。私はクッキーがそこに行く方法だと思うので、すべてのユーザーがアカウントを持っているわけではありません。mvc一度だけ表示されるページを実装する

これを達成するための最良の方法を考えてみると、サイト上の任意のアクションの前に実行されるグローバルフィルタを使用し、条件のページ(要求されたページのどこかに保存)ユーザーがログインしていないか、それともより良い方法がありますか? T & C POSTを処理するアクションメソッドで

+0

なぜセッションを使用しないのですか?セッション["AcceptedTC"] =真;その後、アクションを呼び出す前にセッションをチェックする属性を実装します。 –

+2

クッキーはセッションより長く永続化することができます。 – ZippyV

+0

T&Cが変更された場合、問題が発生します。数日後にクッキーが期限切れになることがあり、ユーザーはT&Cが変更されたことを知らないでしょう。 –

答えて

2

:属性を使用するための

Session["AcceptedTC"] = true; 

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class AcceptedTermsCheck : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Check if AcceptedTC is set to true 

     // If set, then do nothing 

     // Otherwise redirect to TC page 
    } 
} 

理由は、あなたが契約条件を受諾することをユーザーに要求しないであろういくつかのページを持っているかもしれないということです。 Application_BeginRequestのチェックを行う場合、柔軟性はありません。

+0

これは私が考えていたこととほぼ同じですし、利用規約ページのようなページを表示する必要がないアクションにフラグを立てるためのホワイトリスト属性を追加すると、グローバル認可フィルタで同様のことが起こったと思います。 –

+0

匿名ユーザーとログインしているユーザーのために、既にユーザーがt&cを見ている場合は、おそらくフラグを設定するためにプロファイルapiを使用します –

1

代替オプションは、global.asaxファイルのApplication_BeginRequestメソッドをオーバーライドすることです。

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(ShouldIShowMessage()) 
    { 
     this.Response.Redirect("RedirectUrl"); 
    } 
} 

private bool ShouldIShowMessage() 
{ 
    // Decision logic here 
} 

EDIT アイブちょうどあなたの意思決定ロジックを明確にするために、考えはまだクッキーを言うようなものを必要とするが、それは属性でコントローラーを飾るために持っまたはグローバルフィルタを追加保存します。

関連する問題