在Servlet 3.0中增加对Cookie(请注意,这里所说的Cookie,仅指和Session互动的Cookie,即人们常说的会话Cookie)较为全面的操作API。最为突出特性:支持直接修改Session ID的名称(默认为“JSESSIONID”),支持对cookie设置HttpOnly属性以增强安全,避免一定程度的跨站攻击。防止脚本攻击,禁止了通过脚本获取cookie信息,浏览器不会将其发送给任何第三方

利用拦截器实现,判断每次请求的响应是否包含SET-COOKIE头部,重写会话Cookie,添加需要的属性。虽较为生硬,但灵活性强。
新的规范API
新的规范添加SessionCookieConfig接口,用于操作会话Cookie,需要掌握以下主要方法:

setName(String name)
修改Session ID的名称,默认为"JSESSIONID"
setDomain(String domain)
设置当前Cookie所处于的域
setPath(String path)
设置当前Cookie所处于的相对路径
setHttpOnly(boolean httpOnly)
设置是否支持HttpOnly属性
setSecure(boolean secure)
若使用HTTPS安全连接,则需要设置其属性为true
setMaxAge(int maxAge)
设置存活时间,单位为秒

如何使用呢,很方便,在ServletContextListener监听器初始化方法中进行设定即可;下面实例演示如何修改"JSESSIONID",以及添加支持HttpOnly支持:

全局设置Session-Cookie相交互部分属性
@WebListener
public class SessionCookieInitialization implements ServletContextListener {
private static final Log log = LogFactory.getLog(SessionCookieInitialization.class);public void contextInitialized(ServletContextEvent sce) {log.info("now init the Session Cookie");ServletContext servletContext = sce.getServletContext();SessionCookieConfig sessionCookie = servletContext.getSessionCookieConfig();sessionCookie.setName("YONGBOYID");sessionCookie.setPath(servletContext.getContextPath());sessionCookie.setHttpOnly(true);sessionCookie.setSecure(false);log.info("name : " + sessionCookie.getName() + "\n" + "domain:"+ sessionCookie.getDomain() + "\npath:"+ sessionCookie.getPath() + "\nage:"+ sessionCookie.getMaxAge());log.info("isHttpOnly : " + sessionCookie.isHttpOnly());log.info("isSecure : " + sessionCookie.isSecure());
}public void contextDestroyed(ServletContextEvent sce) {log.info("the context is destroyed !");
}
}

需要通过ServletContext对象获得SessionCookieConfig对象,才能够进一步自定义session cookie的属性。
无论以前的硬编码还是新的API实现,目标都是一致的,所产生头部信息也是完全一致。
毫无疑问,后者更为方便快捷,省缺了显示的操作响应元数据。
对当前站点的第一次请求,很容易从响应头信息中看到Set-Cookie的属性值:

不同浏览器平台上测试
在Safari、IE8、Opera 11 一切都很正常
Firefox 3.6、Chrome 9.0,JSESSIONID会继续存在:

    YONGBOYID=601A6C82D535343163B175A4FD5376EA; JSESSIONID=AA78738AB1EAD1F9C649F705EC64D92D; AJSTAT_ok_times=6; JSESSIONID=abcpxyJmIpBVz6WHVo_1s; BAYEUX_BROWSER=439-1vyje1gmqt8y8giva7pqsu1

在所有浏览器中,SESSION ID等于新设置的YONGBOYID值(若不相等,问题就严重了!)
在客户端JS无法获得正确的SESSIONI ID了。

Tomcat服务器内置支持
可以不用如上显示设置Cookie domain、name、HttpOnly支持,在conf/context.xml文件中配置即可:

<Context useHttpOnly="true", sessionCookieName="YONGBOYID", sessionCookieDomain="/servlet3" … >
...
</Context>

既然JAVA应用服务器本身支持会话Cookie设定,那就没有必要在程序代码中再次进行编码了。这是一个好的实践:不要重复造轮子。
这里给出一段测试Session重写的一段脚本:

<div style="margin: 40px; paddding: 10px">
<div><a href="sessionCookieTest">正常连接</a></div>
<div><a href="<%=response.encodeURL("sessionCookieTest") %>">重定向连接</a></div>
</div>

会被重写的URL地址类似于:

http://localhost/servlet3/sessionCookieTest;YONGBOYID=19B94935D50245270060E49C9E69F5B6

嗯,在取消会话Cookie之后,可以直接看到修改后的SESSION ID名称了,当然这时候HttpOnly属性也没有多大意义了。
有一点别忘记,设置HttpOnly之后,客户端的JS将无法获取的到会话ID了

Cookie设置HttpOnly属性相关推荐

  1. cookie设置httponly属性防护XSS***

    ***者利用XSS漏洞获取cookie或者session劫持,如果这里面包含了大量敏感信息(身份信息,管理员信息)等,***这里用获取的COOKIE登陆账号,并进行非法操作. COOKIE设置http ...

  2. cookie 设置 httpOnly属性

    cookie 设置 httpOnly属性防止js读取cookie. 建立filter拦截器类 CookieHttpOnlyFilter import java.io.IOException; impo ...

  3. Tomcat为Cookie设置HttpOnly属性

    A:Tomcat 中维持Java webapp的Http会话是以Cookie形式实现的存储在服务端用户状态信息的: B:服务端可以自定义建立Cookie对象及属性传递到客户端: 服务端建立的Cooki ...

  4. java设置httponly_Tomcat为Cookie设置HttpOnly属性

    B:服务端可以自定义建立Cookie对象及属性传递到客户端: 服务端建立的Cookie如果没有设置HttpOnly属性,则在客户端可以用js读取Cookie中的内容(客户端脚本可以读取Session ...

  5. java httponly设置_cookie 设置 httpOnly属性

    cookie 设置 httpOnly属性防止js读取cookie. 建立filter拦截器类 CookieHttpOnlyFilterimport java.io.IOException; impor ...

  6. Cookie的secure和httpOnly属性的含义 以及 Cookie设置HttpOnly,Secure,Expire属性

    Cookie的secure和httpOnly属性的含义 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.c ...

  7. php httponly_PHP设置Cookie的HTTPONLY属性方法详解

    下面小编就为大家带来一篇PHP设置Cookie的HTTPONLY属性方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 httponly是微软对cookie做的扩展,这 ...

  8. php cookie httponly,Cookie的httponly属性设置方法

    为了解决XSS(跨站脚本***)的问题,从IE6开始支持cookie的HttpOnly属性,这个属性目前已被大多数浏览器(IE.FF.Chrome.Safari) 所支持.当cookie中的HttpO ...

  9. 跨站脚本攻击XSS:为什么cookie中有httpOnly属性

    跨站脚本攻击XSS:为什么cookie中有httpOnly属性 通过上篇文章的介绍,我们知道了同源策略可以隔离各个站点之间的 DOM 交互.页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是 ...

最新文章

  1. 关于JAVA中log4j与logslf4j打印日志用法
  2. Python之字符处理方法大全
  3. 《计算机科学导论》一2.3 非位置化数字系统
  4. java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL
  5. 快速排除故障命令除了ping还有tracert
  6. 八十五、Python | Leetcode数据结构之图和动态规划算法系列
  7. NPOI office操作
  8. Tree UVALive - 8212
  9. C#解密出生日期【C#】
  10. jenkins用ssh agent插件在pipeline里实现scp和远程执行命令
  11. frisby用例动态链
  12. android os FileUriExposedException file storage emulated 0 test tx
  13. 机器学习常见算法优缺点汇总
  14. Haproxy+Keepalived+Nginx
  15. PHP模拟实现url rewrite
  16. 2507-AOP- springboot中使用-使用注解方式
  17. 你的不好意思,正在摧毁你
  18. python手工打码_python云打码
  19. 摩斯电码/密码入门简介
  20. mini-smooth-signature.js:小程序canvas带笔锋手写签名,支持微信/支付宝/钉钉/QQ等多平台小程序使用

热门文章

  1. 众享比特入选2020毕马威中国领先金融科技50企业
  2. WPS 子标题跟随副标题编号解决
  3. idea 控制台乱码问题解决
  4. 计算机硬件结构图用幻灯片做,技巧二则 用ppt制作树状结构图
  5. 自媒体爆文如何写作?学会这4点,能让你快速提升阅读量
  6. 【C#+SQL Server】实现模仿QQ的交友软件 四:主窗体设计讲解(附源码和资源)
  7. 贵州大数据应用广 带动经济发展
  8. 知易行难?!你让执行力情以何堪!
  9. iOS日历、日期、时间的计算
  10. 春秋战国诸侯世系表及周天子世系表