如果关闭cookie,则重定向

时间:2011-09-21 15:31:31

标签: asp.net-mvc asp.net-mvc-3

我想检测用户是否关闭了Cookie并重定向它们。理想情况下,我希望这可以在我的网站上工作,以便在任何阶段,如果用户关闭cookie,他们将被重定向到我选择的页面。

有谁知道如何实现这一目标。我正在考虑创建一个帮助器,但我希望有一个更简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

这并不像看起来那么简单,因为您的应用程序有几个方面会影响这里的功能:

  1. 用户首次访问根网址时您会怎么做
  2. 当用户获得非根网址
  3. 的链接时该怎么办
  4. 可以定期检查Cookie
  5. 为什么您需要用户启用Cookie?请解释您的业务流程,也许这可以通过不同的方式进行缓解。

    其他信息

    您说您使用Cookie持久保存用户信息。这与Session存储其会话ID基本相同。在一个cookie里面。这也与任何表单身份验证相同,在登录时,您将全部或部分用户信息存储在每次用户发出请求时访问的cookie中。

    这使您可以使用现有方法实现相同的目标,而不是重新发明轮子。

    1。编写自定义HttpModule

    您的模块应检查您每次用户发出请求时要传递的额外信息。如果该数据不存在,您甚至可以在用户访问应用程序管道之前重定向用户。

    但是要花足够的时间用所有不同的可能执行来思考整个过程,例如首次访问,关闭cookie,之后将其关闭等等。

    2。使用cookies或/和会话

    通过使用Sessions,您必须确保模块在会话模块之后执行,否则会话数据将始终丢失。仅使用cookie不会出现此问题。但这在很大程度上取决于您希望保留的数据量。如果它太多(并且是易失性的)你应该在会话中加入一些,只需在cookie中保留一个句柄即可获得会话数据。

    完全不同的无cookie选项

    完全不同的选项是Asp.net MVC路由和服务器持久性(Session / Cache / DB等)的组合。

    这与无cookie会话类似,但这次是使用Asp.net MVC路由手动完成的。假设这个路由定义:

    routes.MapRoute(
        "Retention"
        "{handle}/{controller}/{action}/{id}",
        new { Controller = "Home", Action = "Index", Id = UrlParameter.Optional },
        new { Handle = "\d+" } // set your own constraint according to your needs
    );
    routes.MapRoute(
        "Default"
        "{controller}/{action}/{id}",
        new { Controller = "Home", Action = "Index", Id = UrlParameter.Optional }
    );
    

    这样,您将在URL中保留用户持久性数据句柄,即使用户关闭cookie,它仍然可以正常工作。为了避免会话失败,您应该将数据保存在其他存储中。