2010-03-26 64 views
8

我最近在Tomcat上部署了一个简单的Web应用程序。该应用使用非常标准的基于会话的安全性,其中登录的用户被授予会话。会话Cookie和IE 8

会话在Firefox和Chrome中运行良好,但需要在IE的URL(测试7 & 8)中使用jsessionid,并设置为中等隐私。在IE 8中,我试图覆盖cookie处理,设置“允许所有第三方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会话,所以我非常惊讶,迄今为止我还找不到其他人遇到同样的问题。有人有主意吗?

编辑3/4/2010 -

很抱歉,如果我没有做这个clear-我从IE浏览器的多个其他实例尝试 - 同事在大厅等

编辑4/3/2010 -

我也尝试开启所有cookies的提示,但我没有得到提示。使用Fiddler在“Set-Cookie”标题中设置域也没有什么不同。

+0

能饼干需要有域设置?我不知道的方式来配置在Tomcat中,但也许我可以乱用带有过滤器的cookie头... – 2010-03-29 14:15:54

+0

为什么在你的上IE8'GET'引荐包括在URL中的jsessionid?你用什么工具捕获上述流量(因为浏览器永远不会发送'GET http:// ...')? – 2010-04-02 16:04:55

+0

另一件事我从IE8 HTTP跟踪发现:第一个请求尝试建立一个会话ID“设置Cookie:JSESSIONID = 192999F922D6E9C868314452726764BA;路径= /测试 ”,但第二个请求在“引荐不同的会话ID: ...; JSESSIONID = 6371A83EFE39A46997544F9146AA5CEA”。这两个请求之间是否存在干预行动?有没有关于为什么会有两个会话ID的更多信息?有没有多个窗口invovled? – 2010-04-02 16:07:56

回答

0

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

+0

恩,这篇文章是针对IE 5的? 这个问题可能与Tomcat有关,因为Tomcat是设置会话cookie的人。设置 - 我需要设置一个会话cookie与标准的IE 7和8 – 2010-03-29 14:13:34

1

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

我最近有类似的问题,IE浏览器没有正确接受cookies。经过大量的头部搔抓后,原来是因为服务器和客户端机器之间的时差太大以至于IE拒绝接受cookie。然而,这在Apache中。

+0

作品有只有一分钟的时间差,我不能随意控制客户的IE浏览器的安全和隐私,上衣=/ 感谢您的想法,though-我会保留那个存储我的调试套。 – 2010-03-31 16:22:59

1

尝试使用标准HTTP端口(80)。我已经多次阅读关于URL中有关隐私/安全的端口号的问题,但似乎无法找到相关链接。

+0

我以前也见过这个。如果可以,请使用端口80进行测试以查看是否可以重现问题。 – chris 2010-04-02 13:56:04

+0

感谢您的想法,但这个也没有工作。我在80和8080上运行了该网站。 – 2010-04-02 15:40:15

0

什么安全区是dev1网站的一部分? IE根据哪个区域(以及区域如何配置)来处理cookie和许多其他安全性。

尝试将dev1站点设置为明确成为受信任站点的一部分,并查看会发生什么情况。

区:

Internet 
Local Intranet 
Trusted Sites 
Restricted Sites 

此外,没有饼干已经被限制到/测试路径?尝试为/设置它,看看是否有所作为。

+0

通常,该网站位于Internet区域。受信任的站点和本地Intranet都不会改变行为。 – 2010-04-02 15:43:39

+0

@Matt - 更改cookie路径怎么样? – Goyuix 2010-04-03 16:36:04

0

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

具体,而不是:

http://devl:8080/testing/ 

尝试使用类似:

http://devl.mydomain.com:8080/testing/ 
+0

两者都不作为“本地内部网”处理 - 我被问到是否想打开本地内部网选项,但我没有选择。 – 2010-04-02 15:41:18

+0

因此,当您切换到FQDN时,唯一的区别是“主机:”标题? – 2010-04-02 22:50:04

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”)中的区域指示器以打开安全对话框。互联网的安全级别是否设置为中高?如果不是,这可能是问题的一部分,您应该将其重置为与您的用户相匹配。

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

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

  5. 在菜单栏(如果未启用时启用它),单击“工具”>“Internet选项”。选择“隐私”选项卡。我知道你提到你在这里尝试了一些东西,但如果你的网站不在互联网区域,或者你的网站在“Per Site Privacy Actions”例外列表中,那么这些更改可能不会影响你的网站,所以最好只是确认一下。

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

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

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

  9. 单击各个对话框上的确定关闭他们。

  10. 确认浏览器目前仍处于目标站点( 'http://devl:8080/testing/')。点击“查看”>“网页隐私政策...”查看隐私报告对话框。列表中是否包含“http://dev1:8080/testing/”? “Cookie”栏是否显示“Accepted”为“http://dev1:8080/testing/”?

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

希望这可以帮助或给你一些想法追求。


价:

+0

1.该区域是互联网。 2.设置为中高。 3.用户数据持久性已启用。 6.隐私设置为中等。 7.我的域名不在列表中 - 它是空的。我将它添加到列表中,始终允许 - 它没有任何区别。 8.正如我在帖子中所说,这些选项对我来说没有任何帮助。 10.网址已包含在列表中,但在Cookie下没有文字。对话框的顶部阅读 - “根据您的隐私设置,任何Cookie被限制或禁止 – 2010-04-02 15:13:37

+0

11.虽然没有列出我的网址,所有的孩子,我访问了上市总结说,没有隐私政策被发现。我把操作设置为允许,但它并没有区别。 – 2010-04-02 15:13:55

+0

感谢您的想法,伯特。#11看起来它可能有一些承诺,但它杀死我,我可以将所有选项设置为“允许”,这仍然没有按” t工作 – 2010-04-02 15:14:50

0

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

9

我遇到了这个确切的问题,周围挖了一会儿,发现这一点:

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

它说,这对他们有下划线的域名会导致Windows服务器,Tomcat和IE

问题

不知道这是否能解决您的问题(在这一点上,您可能不在意),但也许下一个来的人可以从中获得一些价值。

+0

哇 - 谢谢,这节省了大量的头发拉动(发生在我身上的IE8)。 – sourcedelica 2011-02-10 21:00:13

+0

哇,我不敢相信这是我的问题。缓慢鼓掌为IE – tomfumb 2012-07-30 19:40:34

+0

从来没有想过在域名下划线会导致这个问题。我们现在必须改变我们所有的域名。 – Parvez 2017-08-08 03:55:27

5

问题:IE8拒绝接受我已经建立了一个网站的Cookie,但Firefox和IE7的工作只是罚款,并为年龄这样做 - 这是稳定的代码。 (对我来说)

解决方案:我的服务器是在不同的时区的客户机上。 STUPID,IDIOTIC IE8试图变得聪明,并拒绝接受存放在本地客户端计算机上的cookies,使用寿命为20分钟。我的PHP代码是直接从书中的文字,即:

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

但是,如果我将其更改为,例如,它工作正常 -

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

这仍然给我留下使得cookie的问题在20分钟后死亡,但至少我的用户现在可以使用我的网站与IE8。如果可以帮助别人,我会传递这些信息。

+0

我也直接验证了这一点。我运行了一个分析服务,其中“无限”到期cookie将保留,但+30分钟会话Cookie几乎立即被拒绝。 UA是:Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C) – razzed 2010-11-05 20:40:46