【问题标题】:How reliable is the Request.Browser.Cookies property in ASP.NET?ASP.NET 中的 Request.Browser.Cookies 属性有多可靠?
【发布时间】:2011-07-13 15:11:47
【问题描述】:

Request.Browser.Cookies 属性(bool 类型)属性存储客户端浏览器是否支持 cookie 以及是否启用它们的信息。

Request.Browser.Cookies 的属性有多可靠?是否保证正确?还是我应该实施 Software Monkey 在this question 中建议的重定向技术?

请注意:这不是“cookies是否可靠”的问题?这是一个问题:“用户浏览器是否接受cookies的信息是否可靠?”

【问题讨论】:

  • 请定义什么行为的可靠性/保证。
  • 是否总是设置正确?即只能从请求中获取信息。只有浏览器可以把它放在那里。我在问是否必须始终设置此信息,或者在某些情况下浏览器不设置它。例如,因为它不支持它,或者因为用户已将其浏览器配置为不将此信息发送到服务器。
  • 你是否可以用不同的浏览器设置一些测试用例来“感觉”它是否有效?同时,如果需要很长时间才能得到答案。
  • @Phil:这是个好主意,但我一直在这里回答 cmets :) 我需要安装一些文本浏览器,因为我只有可能支持它的主要浏览器 - 那会花一些时间。无论如何,如果没有人想添加更多信息,我想最后一个理查兹的回答对我来说已经足够了。
  • 叹息。我扣动扳机向自己开枪。

标签: c# .net asp.net cookies httprequest


【解决方案1】:

随着修改后的问题,一个新的答案:

文档属性HttpBrowserCapabilitiesBase.Cookies 说:

该属性并不表示当前浏览器是否启用cookies,只表示浏览器是否支持cookies。

它似乎是根据用户浏览器的检测和服务器上的浏览器功能数据库设置的。因此它会可靠地告诉您浏览器是否能够存储 cookie,当且仅当:

  1. 请求的用户代理字符串正确。
  2. 浏览器在数据库中,数据库对浏览器来说是正确的。

如果用户代理 HTTP 标头被更改(例如,通过开发人员工具或代理),条件 #1 将被破坏。如果浏览器比数据库新,或者数据库有缺陷,条件 #2 将被破坏。

tl;dr 版本:无法保证,将此信息视为“尽力而为”。当然,用户也可以禁用 cookie(例如,“私人”浏览模式)。


另一个问题的原始答案:

如果您想依赖您在响应中发送的 cookie 总是返回完全相同的结果,那么答案是:通常,但不要依赖于此。

可能的原因:

  • 客户端脚本可以修改仅非 HTTP 的 cookie(并且该脚本可以在本地注入)。
  • 浏览器错误。
  • 使用非浏览器发出不为用户处理 cookie 的请求(例如 wget.exe)。
  • 修改请求或响应的代理。
  • 客户端系统上的本地时钟已修改,导致 cookie 过期。
  • 用户修改浏览器的cookie存储。

【讨论】:

  • 我认为这不是我的问题的答案。我觉得人们不明白我在问什么,但我不知道如何让它更清楚......我已经编辑了这个问题。我不在乎 cookie 本身是否安全,或者它们是否可以修改,或者它们是否可靠。我在问Request.Browser.Cookies 中存储的信息是否可靠。如果用户浏览器支持 cookie,则该属性应为 true,否则为 false它不存储 cookie.
  • @drasto:您是想问“ASP.NET 浏览器功能数据库中的信息是否可以保证客户端针对 cookie 进行任意请求的能力”?
  • 是的,我想你明白了。也请阅读我的其他 cmets,这样我就不必重复自己了。
  • 谢谢你,现在很完美。以后应该会接受吧。我会稍等片刻,让您有机会通过投票获得额外的声誉(投票的人不会过多阅读已接受的问题)。
【解决方案2】:

我知道人们没有理解您问题的要点。但是您似乎对该方法的可靠性有疑问。我的意思是,我可以问“Request.QueryString 可靠吗?它会返回请求 URL 中的所有参数吗?”答案是“是”,除非你有一些与之相矛盾的信息。那么您是否知道 Request.Browser.Cookies 不可靠的信息?据我所知是这样。您是否遇到过无法正常工作的情况?

【讨论】:

  • 哈哈是的,我是第二个。您通常希望避免使用 cookie。这是旧技术。
  • 正如我在另一条评论中所建议的那样 - 有关浏览器功能的信息来自浏览器本身。因此,取决于浏览器是否发送有关禁用 cookie 的信息。我的浏览器可以忽略 cookie,但仍会发送信息表明它们已启用。如果有这样的浏览器被广泛使用,那么我的问题的答案是“不,它不可靠”,否则答案是“是的,它是可靠的,你不需要使用重定向技术仔细检查它”
  • 我会说有很多不同的浏览器(除了“四大”)不支持 cookie 或错误地报告它们的支持。我不知道框架中的 browsercap 定义是否涵盖了所有这些,所以我想如果您进行二次检查会更安全。
  • @Brian McCarthy:我应该避免使用 cookie 吗?饼干是老技术?那么在你看来我应该用什么来代替它们呢?
  • @drasto 我很确定 browsercaps 不会涵盖所有可能的浏览器版本和组合,这就是为什么您的二次检查是个好主意。就像理查德说的那样,您所询问的这种方法是“尽力而为”,绝不是 100% 万无一失的。通常我只是尝试设置一个 cookie 并观察会发生什么:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 2012-02-27
  • 2015-03-31
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多