我在tomcat下运行java应用程序,它是由apache webserver提供的。 在我的代码中,我将cookie域设置为 .example.com的
但我的Cookie仍显示在www.example.com下,而不是在客户端浏览器中的example.com下。什么是奇怪的谷歌分析cookie出现在example.com下,但我自己的代码不能在example.com下存储cookie?
Apache服务器的设置使得example.com的请求在客户端浏览器地址栏中显示为www.example.com,如果这与问题有关?我确实需要为example.com和www.example.com生成不同的会话ID,这对我的应用程序不利。
答案 0 :(得分:0)
设置Apache服务器 example.com的请求显示为 www.example.com在客户端浏览器中 地址栏如果与地址栏相关 问题?
我不是百分百肯定,但这看起来像是问题的根源。 Apache如何使客户端浏览器显示www.example.com而不是example.com?最有可能的方法是,将example.com的每个请求重定向到www.example.com。当浏览器处理重定向时,它会发送一个www.example.com请求,从那时起就认为它正在与www.example.com合作。
现在,当响应头中有Set-Cookie时会发生什么?它显然会将其视为来自www.example.com。浏览器无法允许此cookie将其域设置为.example.com,因为这将是一个安全问题。想象一下,mysite.somefreehosting.com为域名设置了一个cookie .somefreehosting.com。然后someothersite.somefreehosting.com将收到此cookie,这可能会导致很多麻烦。该标准规定应拒绝此类cookie,但如果某些浏览器足够聪明以处理此类情况并将.example.com视为www.example.com,我不会感到惊讶。
可以肯定的是,我建议您通过发送lwp-request脚本之类的请求来检查您的网站向浏览器发送的确切内容。您将看到正在发生的重定向以及响应中实际设置的标头,如下所示:
alqualos@ubuntu:~$ lwp-request -sSed http://google.com/
GET http://google.com/ --> 301 Moved Permanently
GET http://www.google.com/ --> 302 Found
GET http://www.google.co.il/ --> 200 OK
Cache-Control: private, max-age=0
Connection: close
Date: Sat, 18 Dec 2010 18:54:57 GMT
Server: gws
Content-Type: text/html; charset=windows-1255
Content-Type: text/html; charset=windows-1255
Expires: -1
Client-Date: Sat, 18 Dec 2010 18:54:57 GMT
Client-Peer: 173.194.37.104:80
Client-Response-Num: 1
Set-Cookie: PREF=ID=368e9cfd56643257:FF=0:TM=1292698497:LM=1292698497:S=s-Jur84NgaNH5Mzx;
expires=Mon, 17-Dec-2012 18:54:57 GMT; path=/; domain=.google.co.il
Set-Cookie: NID=42=bZ6goDV_b2MiWlTMONwiijaON5U_TBGB2_yNheonEwA1GVLU77EhyfUhk9Wvj70xTFrpvGy4s_aBp1UZtvRRnsnYjacjz_UVx0_iSr9R3nYXMyRtwkS5qV98_Egb16pZ;
expires=Sun, 19-Jun-2011 18:54:57 GMT; path=/; domain=.google.co.il; HttpOnly
Title: Google
X-XSS-Protection: 1; mode=block