8

我最近构建了一个部署在 Tomcat 上的简单 Web 应用程序。该应用程序使用非常标准的基于会话的安全性,其中为已登录的用户提供了一个会话。

会话在 Firefox 和 Chrome 中运行良好,但需要在 IE(测试 7 和 8)的 URL 中使用 jsessionid,设置为中等隐私。在 IE 8 中,我尝试覆盖 cookie 处理,设置“允许所有 3rd 方 cookie”和“允许所有会话 cookie” - 没有骰子。但是,当我在本地机器上运行 Tomcat 时,IE 接受 cookie,并且会话工作正常。

现在,对于 HTTP 标头。

在 Chrome 中,登录的用户会获得一个会话

GET http://devl:8080/testing/ HTTP/1.1
Host: devl:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1036 Safari/532.5
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
P3P: CP="NON CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT STA"
Set-Cookie: JSESSIONID=9280023BCE2046F32B13C89130CBC397; Path=/testing
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 2450
Date: Fri, 26 Mar 2010 14:14:40 GMT

GET http://devl:8080/testing/logout HTTP/1.1
Host: devl:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1036 Safari/532.5
Referer: http://devl:8080/testing/
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=9280023BCE2046F32B13C89130CBC397

...

从 IE 8 开始,具有标准的中级安全性和隐私性——

GET http://devl:8080/testing/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; Tablet PC 2.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: devl:8080
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
P3P: CP="NON CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT STA"
Set-Cookie: JSESSIONID=192999F922D6E9C868314452726764BA; Path=/testing
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 2450
Date: Fri, 26 Mar 2010 14:32:34 GMT

GET http://devl:8080/testing/logout HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://devl:8080/testing/;jsessionid=6371A83EFE39A46997544F9146AA5CEA
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; Tablet PC 2.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: devl:8080

...

我认为这可能是 P3P,但在添加紧凑策略时,没有任何变化。这是标准的 Tomcat 会话,所以我很惊讶到目前为止我还没有找到其他有同样问题的人。有人有想法么?

编辑 2010 年 4 月 3 日-

抱歉,如果我没有说清楚 - 我已经尝试过其他多个 IE 实例 - 大厅里的同事等等。

编辑 2010 年 4 月 3 日-

我也尝试过打开所有 cookie 的提示,但我没有收到提示。使用 Fiddler 在“Set-Cookie”标头中设置域也没有什么不同。

4

11 回答 11

9

我遇到了这个确切的问题,挖了一段时间,发现了这个:

http://forums.iis.net/p/1147938/1879164.aspx

表示带有下划线的域名会导致 Windows Server、tomcat 和 IE 出现问题

不确定这是否能解决您的问题(此时,您可能不在乎)但也许下一个出现的人可以从中获得一些价值。

于 2010-08-05T21:11:40.607 回答
5

问题:IE8 拒绝接受我建立的网站上的 cookie,但 Firefox 和 IE7 工作得很好,并且已经这样做了很长时间 - 这是稳定的代码。

解决方案(对我而言):我的服务器与客户端计算机位于不同的时区。STUPID,IDIOTIC IE8 试图变得聪明,拒绝接受 20 分钟寿命的 cookie(存储在本地客户端计算机中)。我的 PHP 代码直接来自教科书,因此:

setcookie($name,$value,time()+1200);

但是,如果我将其更改为,例如 -

setcookie($name,$value,time()+120000);

这仍然给我留下了 20 分钟后使 cookie 失效的问题,但至少我的用户现在可以使用 IE8 使用我的网站。我传递此信息以防它可能对其他人有所帮助。

于 2010-08-10T11:36:52.370 回答
1

尝试使用标准 HTTP 端口 (80)。我已经不止一次地阅读过有关 IE 中的隐私/安全的 URL 中的端口号问题,但目前似乎找不到相关链接。

于 2010-04-01T23:20:57.773 回答
1

这个关于 P3P 的论坛似乎很重要。

您是否还考虑过为会话 cookie 设置域和到期日期?

于 2010-04-02T17:59:31.913 回答
1

我同意 Lexicore - 来自 Web 服务器的 cookie 协议看起来是正确的,所以 IE 有一些东西。如果我们能更好地理解 IE 拒绝 cookie 的原因,就会更容易弄清楚如何解决这个问题。或者,请朋友在 IE 中为您访问该站点,以帮助确认其是服务器问题而不是浏览器实例问题。

这里有一些需要检查的东西来帮助调试 IE 和 cookie - 不幸的是,有很多选项需要检查。抱歉,如果其中一些项目看起来很基本 - 我只是不想做出任何假设。为此,我正在关注 IE 8.0。

首先,在 IE 中浏览到目标站点 ( http://devl:8080/testing/ )。然后:

  1. 确认 IE 将哪个区域分类为“ http://devl:8080/testing/ ”。(这可以解释为什么它可以在您的本地计算机上与 Tomcat 一起使用。)该区域显示在浏览器的底部栏中,并且很可能显示“Internet”。如果它改为显示“本地 Intranet”、“受信任的站点”或“受限制的站点”,这可能是问题的一部分,您应该更新您的问题或弄清楚为什么它没有被归类为 Internet。

  2. 双击底部栏中的区域指示器(可能是“Internet”)以打开“安全”对话框。Internet 的安全级别是否设置为中高?如果不是,这可能是问题的一部分,您应该重新设置它以匹配您的用户。

  3. 选择“Internet”区域,然后单击“自定义级别...”按钮打开“安全设置”对话框。确认“用户数据持久性”选项设置为“启用”。“用户数据持久性”选项位于“杂项”部分中选项列表的底部 1/4(靠近下一部分“脚本”上方的部分底部)。

  4. 在每个对话框上单击确定以关闭它们。

  5. 在菜单栏上(如果未启用,则启用它),单击“工具”>“Internet 选项”。选择“隐私”选项卡。我知道您提到您在这里尝试了一些事情,但是如果您的站点不在 Internet 区域中或者您的站点在“每站点隐私操作”例外列表中,那么这些更改可能不会影响您的站点,因此最好确认一下。

  6. 隐私选项卡中的隐私设置是否设置为中?如果没有,您可能需要重置为默认值。

  7. 单击“站点”按钮以打开“每站点隐私操作”对话框。您的 dev1 站点是否列出?如果是这样,请将其删除。单击“确定”关闭对话框。或者,您可以强制您的 dev1 站点始终允许 cookie。

  8. 单击“高级”按钮。是否选中了“覆盖自动 cookie 处理”?如果是,您可能希望取消选中它以匹配您的用户。或者,尝试选中它并选中“始终允许会话 cookie”。

  9. 在每个对话框上单击确定以关闭它们。

  10. 确认浏览器仍在目标站点(' http://devl:8080/testing/ ')。单击“查看”>“网页隐私政策...”以查看隐私报告对话框。该列表是否包括“ http://dev1:8080/testing/ ”?Cookie 列是否为“ http://dev1:8080/testing/ ”指示“已接受”?

  11. 从列表中选择“ http://dev1:8080/testing/ ”。单击摘要以查看隐私政策。如果为您的网站设置了一个,您应该在此处看到它。否则,您应该会收到一条消息,指出未找到隐私政策。查看对话框底部,了解站点如何设置为使用 cookie(比较、始终允许或从不允许)。

希望这对您有所帮助或给您一些想法。


参考:

于 2010-04-02T02:08:28.137 回答
1

您是否检查过服务器时间是否正确?

我最近遇到了类似的问题,即 IE 无法正确接受 cookie。经过一番摸索,原来是因为服务器和客户端机器之间的时间差太大,以至于 IE 拒绝接受 cookie。然而,这是在 Apache 中。

于 2010-03-31T10:52:56.997 回答
0

dev1 站点属于哪个安全区域?IE 以不同的方式处理 cookie 和许多其他安全性,具体取决于哪个区域(以及区域的配置方式)。

例如,尝试将 dev1 站点设置为明确成为受信任站点的一部分,然后看看会发生什么。

区域:

Internet
Local Intranet
Trusted Sites
Restricted Sites

另外,cookie 是否必须限制在 /testing 路径中​​?尝试为 / 设置它,看看是否有区别。

于 2010-04-01T23:26:03.643 回答
0

从您所说的看来,您似乎只在 IE 中看到过这个问题,并且只在办公室中使用过计算机。IT 部门是否在所有办公室计算机上安装了任何类型的“安全套件”,如果有,您可以暂时禁用它吗?通常,这些类型的应用程序会挂接到 IE 并使用其 HTTP 堆栈。如果您确实安装了类似的软件,您是否有可以测试的“干净”安装或非公司计算机?

于 2010-04-03T15:59:33.180 回答
0

我会尝试使用服务器的完全限定主机名。MSIE 将没有域的主机名视为位于“本地 Intranet”中,并以不同的方式处理安全性。

具体来说,而不是:

http://devl:8080/testing/

尝试使用类似的东西:

http://devl.mydomain.com:8080/testing/
于 2010-04-01T23:29:19.963 回答
0

这显然与 Tomcat 无关,因为正在设置 cookie - 只是不被 IE 接受。那么这一定是IE中的安全问题。也许这篇 MS 文章将有助于调整它。

于 2010-03-29T12:31:46.397 回答
0

我们服务器上的时间延迟了 14 分钟(并且在正确的 EST 时区)。

一旦我们将服务器上的时间设置为正确的时间,cookie 就会重新开始工作。

埃德

于 2020-11-19T15:49:41.920 回答