2012-04-11 23 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,但它省去了与属性装饰控制器或加入一个全球性的过滤器。