在java应用程序中发送和检测cookie的最佳方法是什么?

在java应用程序中发送和检测cookie的最佳方法是什么?,java,http,cookies,Java,Http,Cookies,当用户第一次访问www.example.com时,我如何检测客户端浏览器是否启用了cookie,如果启用了cookie,如何将cookie发送到客户端而无需发送重定向请求(HTTP 302请求)?如果必须执行重定向,那么在不执行多个重定向或搜索引擎机器人不友好重定向的情况下发送cookie的最佳方式是什么?我的java应用程序需要在访问者第一次访问example.com时快速创建基于cookie的帐户。之后,后续访问将基于此cookie识别用户 此解决方案不应基于Javascript,因为如果禁

当用户第一次访问www.example.com时,我如何检测客户端浏览器是否启用了cookie,如果启用了cookie,如何将cookie发送到客户端而无需发送重定向请求(HTTP 302请求)?如果必须执行重定向,那么在不执行多个重定向或搜索引擎机器人不友好重定向的情况下发送cookie的最佳方式是什么?我的java应用程序需要在访问者第一次访问example.com时快速创建基于cookie的帐户。之后,后续访问将基于此cookie识别用户


此解决方案不应基于Javascript,因为如果禁用Javascript,它仍然需要工作。

首先-在您设置cookie之前,无法(明确)判断客户端是否支持cookie。如果您在服务器端执行此操作,由于Cookie是作为HTTP请求的一部分发送的,因此您必须发出某种重定向来进行此检查:

   client                  server
1a. GET index.html ---->
1b.            <------------ sets a cookie, redirect to index.html?foo=bar
2. GET index.html?foo=bar -->
客户端服务器
1a。获取index.html-->
1b。
使用Javascript确实可以解决这个问题,因为您至少可以查询cookie是否设置在客户端,而不需要客户端发出另一个请求——但正如您所说,这是Javascript

请注意,这种检查并不完全可靠;它并不能真正验证cookies是否会以任何有用的方式存在(例如,反间谍软件程序可能每30分钟清除一次cookies)。它甚至不能验证您是否能够设置下一个cookie(特别是当它位于不同的子域上时;或者用户可能已经要求UA提示输入每个cookie,因此,仅因为此cookie被接受并不意味着下一个cookie将被接受)。用户下次登录时可能来自不同的浏览器(使用不同的设置),或者他们更改了此浏览器的安全设置,等等

实际上,我认为这与客户端表单验证是一样的——当访问者尝试一些根本不起作用的东西时,能够警告他们是很好的,但是你不能真正依赖它是正确的。在这种情况下,你的最后一句话有点令人担忧——因为你说它需要发挥作用。如果此测试出错(即,您认为您可以设置cookie,但实际上无法设置cookie),会产生什么后果?我并不是说你的网站需要在没有cookie的情况下工作,只是你需要意识到你的检查可能会出现误报,你需要意识到这一点


因此,在这种情况下,我想说,在Javascript中进行检查可能更好;如果有人禁用了JS和Cookie,他们将无法与大多数具有某种登录的站点进行交互。当您收到一个没有cookies的请求时,您必须返回一个“Ooops,看起来您禁用了cookies页面”,因此,如果跳过初始检查,就很难打破游戏规则。

感谢您深入了解此问题。在我的应用程序中,有一个链接在单击时生成动态内容。每次单击同一链接时,都会生成不同的动态内容。如果启用了UA cookie,我只允许通过cookie跟踪用户,在此链接上单击一定次数。如果禁用cookie(在大多数情况下,这意味着它是一个搜索引擎机器人,因为大多数用户启用了cookie)然后,我允许任何数量的点击这个链接,因为在这种情况下,我无法跟踪有多少点击是从该UA链接上完成的。我面临的问题是,快速检测只有一次,如果cookies被启用或未启用,并且必须在每一个请求上检测一次又一次,如果cookies被禁用,这对SEO是可怕的(因为搜索引擎机器人已禁用Cookie)。