【问题标题】:Options for preserving state保留状态的选项
【发布时间】:2012-03-05 19:03:35
【问题描述】:

我有一个页面需要检查是否存在 cookie,然后执行重定向。

我编写了代码 (ASP.NET) 来检测 cookie 并执行重定向。伪代码:

HttpCookie myCookie = Request.Cookies.Get("theCookie");
if(myCookie == null)
{
 myCookie = new HttpCookie("theCookie","myValue")
 response.Redirect("page.aspx"); //Redirect to check for the presence of the cookie
}

More code...

当用户启用 cookie 时,这种方法可以正常工作。但是,当它们禁用 cookie 时,它​​们最终会陷入无限循环(页面尝试创建 cookie,重定向,没有看到 cookie,然后再次重定向,无限循环)。大多数人类用户可能会没事,但这可能会对网站的 SEO 评级产生影响。

我已经绞尽脑汁寻找解决方案,因为 cookie 是不可能的,所以留下了视图状态和查询字符串。

因为我必须做一个重定向,我想我被查询字符串困住了。问题是为了检测页面是否已经被点击,我需要附加一个查询字符串以防止重定向再次启动。

谁能想到不使用 cookie、视图状态或查询字符串的方法来完成此操作(防止重定向)?我认为答案可能是否定的......

【问题讨论】:

    标签: c# asp.net cookies seo


    【解决方案1】:

    以您描述的方式使用查询字符串是正确的解决方案。

    【讨论】:

      【解决方案2】:

      编辑:看起来是个坏主意 - 查询字符串是方法。留作参考:本地存储和脚本都可以禁用,所以在设计任何客户端检测逻辑时都需要考虑。


      您也可以尝试在浏览器中使用本地存储来防止无限重定向。它将允许您从“?isCookie=true”查询字符串中保持 url 干净。请注意,您需要为此启用 JavaScript。如果您担心 cookie,您也应该担心 JavaScript 被禁用。

      【讨论】:

      • 只是想知道本地存储是否最终会成为可以禁用的东西,就像 cookie 一样。
      • 我想是的。此外,如果有业内人士完全了解本地存储,我也会感到惊讶。 Cookie 和 JavaScript 通常被认为是“邪恶的”,因此人们可能会努力禁用它们。
      【解决方案3】:

      我最终做的是(以防其他人尝试)使用了几个技巧:

      • 设置 ASP.NET 隐藏字段控件,并将其值设置为 false(默认 - 禁用 cookie)
      • 使用客户端脚本检查 cookie 是否启用
      • 如果设置了 cookie,则启用 cookie。 在这种情况下,我使用 jQuery 调用将隐藏字段的值从 false 更改为 true
      • 服务器端,如果隐藏字段的值为真,则页面进行重定向。否则,它只会继续处理页面。

      如果用户禁用了 Javascript,则隐藏字段的值保持为 false,因此页面仍然只呈现一次。

      感谢您让我畅所欲言并让我思考!

      【讨论】:

        猜你喜欢
        • 2014-02-03
        • 2022-01-17
        • 2018-08-11
        • 2020-06-11
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多