【问题标题】:if cookies are disabled, does asp.net store the cookie as a session cookie instead or not?如果 cookie 被禁用,asp.net 是否将 cookie 存储为会话 cookie?
【发布时间】:2010-12-29 17:32:10
【问题描述】:

基本上,如果客户端禁用了 cookie,我想知道这是否...

dim newCookie = New HttpCookie("cookieName", "cookieValue")

newCookie.Expires = DateTime.Now.AddDays(1)

response.cookies.add(newCookie)

注意我设置了一个日期,所以它应该存储在磁盘上,如果禁用 cookie,asp.net 会自动将此 cookie 存储为会话 cookie(这是一个持续存在于浏览器内存中的 cookie,直到用户关闭浏览器,如果我没记错的话).... 或者 asp.net 根本不添加 cookie(在任何地方),在这种情况下,我必须在没有日期的情况下将 cookie 重新添加到集合中(存储为会话 cookie) ...当然,这需要我添加一个cookie两次...如果它无论如何都存储在浏览器内存中,也许第二次是不必要的...我只是尽量不存储它两次,因为它只是糟糕的代码!!如果我需要写另一行,有什么想法吗? (应该是)...

response.cookies.add(New HttpCookie("cookieName", "cookieValue") ' 客户端浏览器内存中的会话cookie

谢谢大家

【问题讨论】:

  • 只是一个评论,我不是在谈论会话对象以及它如何将其 id 保存在 cookie 中,我只是在谈论会话 cookie 和 cookie...(与会话对象无关) ...会话cookie是指客户端内存cookie数据(客户端内存,而不是服务器)
  • 对此没有混淆。你最终想要做的事情是不可能的。 “会话 cookie”是一个 cookie,IE 显然使用了一些智能逻辑来解决这个问题。
  • 一个小注意点,你说你想“[存储]信息在用户计算机内存(客户端/浏览器内存)中,而不是连续传输数据(viewState)或将其全部加载到我的服务器内存 (sessionState)" - 如果您使用默认路径为此使用 cookie,则 cookie 及其数据将随每个请求发送到服务器 ,并存储在 Request 对象的 Cookies 集合中,因此您实际上并没有在任何一端进行任何节省,而是实际上为各方做了更多的工作。您可以查看 Silverlight 或 Flash 存储选项...

标签: c# asp.net ajax cookies client


【解决方案1】:

这篇MSDN 文章似乎表明没有内置机制来补偿用户禁用cookies。它还表明如果不启用至少某种程度的 cookie,会话状态将无法工作。

我认为有一种机制可以为会话 id 传递查询变量,但是(快速)浏览文章我没有看到这个。

希望对您有所帮助。

编辑:它确实说您可以使用无 cookie 会话(我认为您可以)。他们使用单独的机制在页面和 url 链接中嵌入会话 ID。

【讨论】:

  • 不讨论会话状态,即:session("someVar") = "someValue" 只讨论 cookie,即:在客户端磁盘和客户端浏览器内存上
  • 我意识到这一点,但无 cookie 会话的支持将是会话状态维护。奇怪的是,它也被禁用了(恕我直言,这不是最好的设计)。我相信,如果用户禁用了 cookie,您将不会收到任何警告(除了自己检查之外),cookie 只会消失在以太中。
  • 但在某些情况下,客户端可以将 cookie 数据存储在其客户端浏览器内存中,同时不允许将 cookie 数据存储在磁盘上的 cookie 文件中。在 Internet Explorer 中,该选项标记为“允许会话 cookie”
  • 我相信就 ASP.NET 而言,这是“启用 cookie”,而“禁用”是禁用所有部分。由于这些是浏览器设置,您必须尝试并查看结果。
  • 将运行测试并告诉您进展如何
【解决方案2】:

为了跟进 GrayWizardx 的回复,大部分内容都是完全准确的。

如果您使用的是 Cookie 版本的 Session,并且 cookie 被禁用,那么您就不走运了。但是您可以选择使用 Session 的无 cookie 版本,它会在 URL 中添加一个显示用户会话 ID 的字符串。这看起来很丑,从安全的角度来看,我一直很担心。

所以你有三个选择(我能想到的): 1. 需要 cookie。这不是一件坏事,特别是如果您的网站需要正常使用 cookie。 2. 使用 ViewState。
3. 在 URL 内逐页传递信息。从安全的角度来看,这再次让我担心。

【讨论】:

  • 只是一个问题,如果禁用 cookie,是否有任何方法可以在用户计算机内存(客户端/浏览器内存)中存储信息,而无需连续传输数据(viewState)或将其全部加载我的服务器内存(会话状态)...我只想将尽可能多的存储卸载到客户端(同时牢记安全义务)...如果没有选择,请将它们保存在服务器内存或视图状态中。我认为如果禁用 cookie,并不一定意味着会话 cookie 被禁用,所以我原来的问题仍然适用......有什么想法吗?
  • Cookie 是 Cookie。如果它们被禁用,那么它们都被禁用。如果用户想将您拒之门外,您无能为力。这只是浏览器/网站的模型。为什么如此关注启用或禁用 cookie?我开发了一些相当大的项目,这对我或项目中的业务人员来说从来都不是问题。有些人只是想在网络上获得糟糕的体验。我们不能阻止太多。
  • @Clarence:你错了,进入 Internet Explorer cookie 设置,你会发现即使你可以禁用 cookie,你也可以专门启用会话 cookie while cookie写入磁盘被禁用。我不担心这一点,我只需要知道当磁盘/持久性 cookie 被禁用以及当您提供到期日期时,asp.net 如何处理 cookie 的写入(如果它写入会话 cookie)。在这种情况下,它是写入会话 cookie(在浏览器内存中)还是根本不写入任何内容。这就是我需要知道的。
  • 啊好的,感谢您的澄清...基本上我使用网络服务来填充一些数据(整数数组)并且不能在网络服务中使用视图状态,不想使用会话状态,所以唯一的选择是真的要使用 cookie...
  • 只是一个评论,我不是在谈论会话对象以及它如何将其 id 保存在 cookie 中,我只是在谈论会话 cookie 和 cookie...(与会话对象无关) ...会话cookie是指客户端内存cookie数据(客户端内存,而不是服务器)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2011-12-13
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2013-06-10
相关资源
最近更新 更多