我使用addCookie
方法设置scdid
,就像jsessionid
一样。但遗憾的是,它在Chrome和IE浏览器上没用,这对Firefox来说还不错。
那么,有人能帮助我吗?
Cookie cookie = new Cookie("xx", "xxx");
cookie.setMaxAge(3600);
cookie.setDomain("xxxx");
cookie.setPath("/");
response.addCookie(cookie);
这是请求/响应正文:
Headers
Remote Address:127.0.0.1:80
Request URL:http(can't give it to a link)://localhost/login
Request Method:POST
Status Code:302 Found
Request body
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:28
Content-Type:application/x-www-form-urlencoded
Cookie:JSESSIONID=3a210ab5-2e48-4a0b-b669-f9b5e82b9988
Host:localhost
Origin:http://localhost
Referer:http://localhost/login
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Response body
Content-Length:0
Date:Tue, 09 Jun 2015 01:06:52 GMT
Location:http://localhost/
Server:Apache-Coyote/1.1
Set-Cookie:examid=366d69ae-5249-4e68-b779-c03056188249; Domain=localhost; Expires=Tue, 09-Jun-2015 02:06:51 GMT; Path=/
以上回复是在星期二,2015年6月9日08:06:51收到的。
2015-06-10编辑: 我通过以下方式解决了这个问题,但我仍然感到困惑。
Cookie cookie = new Cookie("examid", UUID.randomUUID().toString());
response.addCookie(cookie);
在此解决方案中,我没有设置过期,域名和路径,从Chrome中的jsessionid获取灵感。
Remote Address:127.0.0.1:80
Request URL:http://localhost/login
Request Method:POST
Status Code:302 Found
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:28
Content-Type:application/x-www-form-urlencoded
Cookie:JSESSIONID=f63df7a3-f381-4914-92c1-a349bf73316b; examid=
Host:localhost
Origin:http://localhost
Referer:http://localhost/login
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
Form Dataview source
username:admin
password:xxxx
Response Headers
Content-Length:0
Date:Wed, 10 Jun 2015 01:35:53 GMT
Location:http://localhost/
Server:Apache-Coyote/1.1
Set-Cookie:examid=d65f7974-17f1-4338-9284-48f00670a012
2015-06-12编辑: 我逐个设置MaxAge,路径,域。我发现设置域(来自请求参数)时它会出错。我的代码是如何获取域名的:
private static final String getDomainName(HttpServletRequest request) {
String domainName = null;
String serverName = request.getRequestURL().toString();
if (serverName == null || serverName.equals("")) {
domainName = "";
} else {
serverName = serverName.toLowerCase();
serverName = serverName.substring(7);
final int end = serverName.indexOf("/");
serverName = serverName.substring(0, end);
final String[] domains = serverName.split("\\.");
int len = domains.length;
if (len > 3) {
// www.xxx.com.cn
domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
} else if (len <= 3 && len > 1) {
// xxx.com or xxx.cn
domainName = "." + domains[len - 2] + "." + domains[len - 1];
} else {
domainName = serverName;
}
}
if (domainName != null && domainName.indexOf(":") > 0) {
String[] ary = domainName.split("\\:");
domainName = ary[0];
}
return domainName;
}
答案 0 :(得分:2)
回答更新后的问题:
实际上,我得到了域名&#34; localhost&#34;按我的代码
所以这就是问题所在:如果您的域名= localhost,则不会设置cookie。通过spec,cookie域名必须至少有2或3个点(。)。 Localhost是顶级域名,因此无法使用。不遵守此规则可能会导致某些浏览器出现问题:
只有指定域中的主机才能为域设置cookie 和域必须至少有两(2)或三(3)个句点 防止表格的域名:&#34; .com&#34;,&#34; .edu&#34;,&#34; va.us&#34;。
作为解决方案,在使用localhost时,我建议您不要设置域名,或者只使用127.0.0.1
。
您可以参考this answer和this answer了解详情。
答案 1 :(得分:0)
您的Chrome和IE浏览器中是否禁用了Cookie?
答案 2 :(得分:0)
HttpServletResponse-> flushBuffer()对我来说绝对好用。
response.flushBuffer();