2012-04-11 48 views
2

我想爲我的網站實施條款和條件頁面,要求用戶接受條款和條件,並可能將該值存儲在cookie中,以便我可以判斷他們是否已接受並沒有不斷提示他們,並非所有的用戶都會有賬戶,所以我認爲cookie是去那裏的方式。mvc執行僅查看一次的頁面

試圖想到實現這一目標的最佳方式,最好是在網站上執行任何操作並重定向到條款和條件頁面(保存請求的頁面的某處)之前執行的全局過濾器。用戶還沒有登錄,或者有更好的方法來做到這一點?

+0

爲什麼不使用會話? Session [「AcceptedTC」] = true;然後實現一個屬性,在調用動作之前檢查會話。 – 2012-04-11 09:19:23

+2

Cookie可以持續比會話更長的時間。 – ZippyV 2012-04-11 10:11:50

+0

如果條款與條件發生變化,則您有問題 - Cookie可能在接下來的幾天內不會過期,用戶將不會意識到條款與條件已更改。 – 2012-04-11 12:25:48

回答

2

在操作方法將處理T &ÇPOST:

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

這幾乎是我的想法,然後添加一些白名單屬性來標記不需要像條款和條件頁面本身顯示頁面的操作,我想我已經看到類似的做法與全球授權過濾器 – 2012-04-11 10:55:47

+0

想到它可能會使用配置文件api的標誌,如果用戶已經看到t&c,因爲它適用於匿名和登錄用戶 – 2012-04-11 10:56:46

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 
} 

編輯 我剛認爲,澄清你的決策邏輯仍然需要像說一個cookie,但它省去了與屬性裝飾控制器或加入一個全球性的過濾器。