注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

Sun JDK 1.6的HTTP客户端的Cookie管理存在的三个问题  

2008-11-25 21:16:42|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第一,Cookie管理依赖于单件类CookieHandler,这就使得我们无法在一个Java程序中模拟多个会话上同一个网站。
第 二,默认的CookiePolicy.ACCEPT_ORIGINAL_SERVER不接受不包含Domain属性的Cookie,而根据RFC 2965,HTTP头Set-Cookie2中的Domain属性是可选的。况且,没有Domain属性的Cookie很常见,实践中,至少tomcat 管理Session用的JSESSIONID就没有传Domain.
第三,sun.net.www.protocol.http.InMemoryCookieStore是默认的CookieStore实现,这个实现完全无视Cookie中指定的Port,虽然这个功能用得很少,但也是RFC的一部分。尽管Java文档上处处提到遵循RFC,但实际代码却完全把这个功能给无视了。

第二个问题的临时解决方案是加上下面这行代码。放在使用URLConnection之前就可以了,一个程序只需要调用一次。
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));

如果担心安全问题,这样写更保险些:

CookieHandler.setDefault(new CookieManager(null, new CookiePolicy(){
    @Override
    public boolean shouldAccept(URI uri, HttpCookie cookie) {
        String domain = cookie.getDomain();
        if(domain == null) {
            return true;
        } else {
            return HttpCookie.domainMatches(cookie.getDomain(), uri.getHost());
        }
    }
}));
  评论这张
 
阅读(421)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018