保存状态的选项

时间:2012-03-05 19:03:35

标签: c# asp.net cookies seo

我有一个页面,我需要检查是否存在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,然后重新定向,无限制)。大多数人类用户可能会好起来,但这可能会对网站的搜索引擎优化评级产生一些影响。

我已经把我的大脑用来解决问题了,因为饼干是不可能的,所以离开了观察状态和查询字符串。

因为我必须进行重定向,所以我认为我遇到了查询字符串。问题是为了检测页面是否已被命中,我需要附加一个查询字符串以防止重定向再次被踢。

有没有人能想到一种方法来实现这一目标(防止重定向)而不使用cookie,viewstate或querystrings?我认为答案可能不是......

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

编辑:看起来很糟糕 - 查询字符串就是方法。保持参考:可以禁用本地存储和脚本,因此在设计任何客户端检测逻辑时需要考虑它。


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

答案 2 :(得分:0)

我做的事情(如果有人试图这样做)使用了几个技巧:

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

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

感谢您让我通过谈话让我思考!