【问题标题】:Why browser is able to view a cookie with max age 0 and programming language is not?为什么浏览器能够查看最大年龄为 0 的 cookie 而编程语言却不能?
【发布时间】:2015-11-13 14:40:37
【问题描述】:

为什么浏览器可以查看过期的cookie,但如果你想用编程语言访问它却无法访问?

如果 cookie 已过期,那么为什么它在浏览器中可见,所有数据和信息也是可见的。但同样不能通过编程实现。

我认为这是一个新手问题,但我想知道我们的代码如何访问 cookie 以及浏览器如何访问 cookie 背后的功能。

注意:-请用有效的例子详细说明。

控制器:-

Cookie ck =  new Cookie("data", "data");
ck.maxAge = 0;
response.addCookie(ck);

页面收到的响应:-

<% for(coki in request.getCookies()){
    System.out.println(coki.name);
    System.out.println(coki.value);
    } %>

【问题讨论】:

  • 因为浏览器不会向服务器发送过期的cookies。
  • 如果我发送一个cookie作为响应,并且在同一个响应中我在页面页面的scriplet标签中访问它,那么同样的条件......????
  • 添加一些代码。完全不清楚你在问什么。
  • 我已经更新了ans看看。

标签: java cookies browser session-cookies


【解决方案1】:

您的控制器正在将 cookie 添加到响应中,但在您的页面中您正尝试从请求中读取它。

(我假设您的控制器正在支持同一页面)

您将在浏览器中看到它,因为浏览器在响应中接收到 cookie。如果您想在页面中将其可视化,则需要从响应中获取它们。但是响应中没有 getCookies 方法,因为这不是它们应该被使用的方式。

Browser                   Page                    Controller
   | --------req------------+------------------------>|
   |                        |                         | {controller adds cookie to response}
   |                        |<-----req,res+cookie-----|
   |                        |                         | {page renders cookies from request}
   |                        |                         | {but there are none}
   |<------res+cookie-------|                         |
   |                        |                         |
   |--------req#2-----------+------------------------>| {subsequent requests arrive without
                                                         cookie since it expired}

【讨论】:

  • 感谢您的回答,但还不清楚您能否更清楚地描述一下.....
  • 我添加了一些蹩脚的 ascii 艺术来演示。不过,这很简单。你在对象 A 上添加了一个 cookie,然后你期望它在对象 B 上。
【解决方案2】:

这是正常的,通常当 cookie 过期时,浏览器不会将该特定 cookie 与页面请求一起发送到服务器。过期的 cookie 将被删除,取决于浏览器和用户的个人设置,您是否可以看到此 cookie。请记住,客户端可以配置浏览器以使 cookie 持续存在,即使它已过期。

正如@Joeri Hendrickx 所说,您将 cookie 添加到响应中。这很正常,您应该使用response 对象来创建响应。

通常,当您将页面发送到服务器时,请求会包含 cookie。

但是您正在使用maxAge = 0 设置此 cookie,并且当浏览器再次发送您的页面时,它不会随请求发送此 cookie,因为 cookie 已过期。所以你的对象request不包含cookiedata

因此,您无法以您的编程语言查看此 cookie。

如果您在 cookie 上设置了过期时间,它会在那个时间过期,而不是在浏览器关闭时过期。浏览器不会将过期的 cookie 发回给您,即使它是刚刚设置的。

设置过期时间是删除已经存在的同名cookie的常用方法。如果 cookie 已过期……它已过期。它被抛出,而不是发送到服务器。

如果您想取回 cookie,请在将来设置过期时间。

【讨论】:

  • 感谢您的回答,但我还是有点困惑。
  • “希望这有帮助”、“谢谢”和“你好”所表达的礼貌在技术写作中同样存在问题。 Stack Overflow 作为一个问答网站,致力于成为类似于百科全书的技术资源。使其作为技术资源有用的写作风格排除了寒暄和形式。即使在具有正式寒暄和礼貌的文化中,人们也不会在技术写作中看到这样的寒暄。删除“谢谢”的原因与“希望这有帮助”并非在每个维基百科页面底部的原因完全相同。
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2019-02-11
  • 2014-07-01
相关资源
最近更新 更多