检测是否通过Java启用了cookie

时间:2010-02-10 21:21:55

标签: java browser cookies

在Java(SE,而不是J2EE)中是否可以检测是否在默认浏览器中启用了cookie?

这不是客户端/服务器应用程序。它只是一个恰好与默认浏览器交互的桌面应用程序。

3 个答案:

答案 0 :(得分:2)

我不确定“默认浏览器”是什么意思,但这里要理解的基本要点是代码,无论是用Java,C ++,Python编写的,你都可以设置一个处理HTTP请求的代码来设置一个cookie使用Set-Cookie并在浏览器的后续请求中查找Cookie标头中可用的内容。如果在客户端关闭cookie,则后续请求中不会有Cookie头。对初始请求的简单重定向也可用于生成“后续”请求。

答案 1 :(得分:0)

有许多浏览器,每个浏览器使用不同的机制来存储用户的偏好...包括确定用户是否已禁用cookie的首选项。

您可以想象实现一个知道如何取消某些流行浏览器的设置信息的Java应用程序。

但是这将包含许多特定于浏览器的操作系统特定代码。在Windows的情况下,它需要在注册表中徘徊;例如使用一些第三方库。当然,这一切都会相当脆弱,因为:

  1. 用户浏览器的下一个版本/版本可以使用不同的设置表示,

  2. 用户可以使用一些您从未听说过的新浏览器,

  3. 可以将不同的Linux发行版等配置为使用设置文件的不同默认位置,和/或说明用户默认浏览器的首选项文件,以及

  4. 用户可以通过一般桌面应用程序无法理解的方式覆盖默认位置。

  5. 编辑 - 另一方面,如果您的桌面应用程序(作为HTTP协议的服务器角色)只需要确定当前正在与之交谈的浏览器将允许它设置cookie,简单的解决方案是尝试执行它并查看它是否有效。

    最后,您需要记住,用户可能没有使用默认浏览器,无论他正在尝试做什么。我经常在机器上安装多个浏览器,并且可以使用非默认浏览器来处理某些事情。

答案 2 :(得分:0)

假设您的应用程序充当浏览器的本地主机服务器,这就是您的问题似乎......

一种方法是将请求重定向到带有特殊cookie的特殊URL,例如将“CookieCheck”设置为某个已知特殊值,将原始URL编码为查询数据。当收到特殊URL的请求时,如果收到“CookieCheck”,则浏览器接受cookie - 然后您可以重定向回原始URL,但cookie设置为实际值。

除非您可以存储后期数据服务器端或将其编码为查询数据,否则这对POST请求可能很难。它还将请求从POST转换为GET,这可能会有问题。