【问题标题】:Detecting whether cookies are enabled through Java检测是否通过 Java 启用 cookie
【发布时间】:2011-01-15 11:24:37
【问题描述】:

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

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

【问题讨论】:

  • 再三考虑 - 如果涉及 HttpURLConnection,可能不会重复。那么 - JavaSE 是什么意思?是关于用小程序检查可可吗? HttpURLConenction?
  • 请详细说明这个问题的背景。此 Java 代码是在客户端机器还是服务器机器上运行?听起来您想在同一台客户端计算机上运行它并测试客户端的默认浏览器是否启用了 cookie,这是真的吗?
  • HttpURLConnection 发出请求,但不监听。
  • Java 平台标准版 (Java SE) 让您可以在桌面和服务器以及当今要求苛刻的嵌入式和实时环境中开发和部署 Java 应用程序。

标签: java browser cookies


【解决方案1】:

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

【讨论】:

  • 您的默认浏览器是操作系统在打开 Internet 链接时首先查看的浏览器。
【解决方案2】:

市面上有许多浏览器,每个浏览器都使用不同的机制来存储用户的偏好……包括确定用户是否禁用 cookie 的偏好。

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

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

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

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

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

  4. 无论如何,用户都可以覆盖默认位置,这是通用桌面应用程序无法理解的。

编辑 - 另一方面,如果您的桌面应用程序(充当 HTTP 协议的服务器角色)只需要确定 它当前正在与之通信的浏览器是否 em> 将允许它设置 cookie,简单的解决方案是尝试这样做,看看它是否有效。

最后,您需要记住,用户可能不会使用 默认 浏览器来完成他正在尝试执行的操作。我经常在一台机器上安装多个浏览器,并且可能会为某些事情使用非默认浏览器。

【讨论】:

    【解决方案3】:

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

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

    这对于 POST 请求可能很难做到,除非您可以在服务器端存储发布数据或将其编码为查询数据。它还将请求从 POST 转换为 GET,这可能会出现问题。

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 2012-05-11
      • 2011-10-03
      • 1970-01-01
      • 2020-12-07
      • 2011-12-28
      • 2015-07-23
      • 2012-02-18
      • 1970-01-01
      相关资源
      最近更新 更多