C# 保存状态的选项

C# 保存状态的选项,c#,asp.net,cookies,seo,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 f

我有一个页面,我需要检查是否存在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...
当用户启用了cookies时,这种方法可以正常工作。但是,当禁用cookie时,它们会陷入无限循环(页面尝试创建cookie,重定向,看不到cookie,然后再次重定向,无限)。大多数人类用户可能会没事,但这可能会对网站的搜索引擎优化评级产生影响

我绞尽脑汁寻找解决方案,既然cookies是不可能的,那就剩下viewstate和querystring了

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


有人能想出一种不使用cookies、viewstate或querystring来实现这一点(防止重定向)的方法吗?我认为答案可能是否定的。

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

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


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

我最后所做的(以防其他人尝试这样做)是使用了一些技巧:

  • 设置值设置为false的ASP.NET隐藏字段控件(默认-禁用Cookie)
  • 使用客户端脚本检查是否启用了Cookie
  • 如果设置了cookie,则启用cookie。在本例中,我使用jQuery调用将隐藏字段的值从false更改为true
  • 在服务器端,如果隐藏字段的值为true,则页面执行重定向。否则,它将继续处理页面
如果用户禁用了Javascript,则隐藏字段的值仍然为false,因此页面仍然只呈现一次


谢谢你让我畅所欲言,让我思考

我只是想知道本地存储是否会像cookies一样被禁用,我想是的。此外,如果有任何行业外的人从一开始就知道本地存储,我会感到惊讶。Cookie和JavaScript通常被认为是“邪恶的”,因此人们可能会努力禁用它们。