您现在的位置是:亿华云 > 域名
Cookie设置HttpOnly属性
亿华云2025-10-04 02:43:06【域名】0人已围观
简介在Servlet 3.0中增加对Cookie请注意,这里所说的Cookie,仅指和Session互动的Cookie,即人们常说的会话Cookie)较为全面的操作API。最为突出特性:支持直接修改Ses
在Servlet 3.0中增加对Cookie(请注意,设置属性这里所说的设置属性Cookie,仅指和Session互动的设置属性Cookie,即人们常说的设置属性会话Cookie)较为全面的操作API。最为突出特性:支持直接修改Session ID的设置属性名称(默认为“JSESSIONID”),支持对cookie设置HttpOnly属性以增强安全,设置属性避免一定程度的设置属性跨站攻击。防止脚本攻击,设置属性禁止了通过脚本获取cookie信息,浏览器不会将其发送给任何第三方
利用拦截器实现,判断每次请求的设置属性响应是否包含SET-COOKIE头部,重写会话Cookie,设置属性添加需要的设置属性属性。虽较为生硬,设置属性但灵活性强。设置属性
新的设置属性规范API
新的规范添加SessionCookieConfig接口,用于操作会话Cookie,设置属性需要掌握以下主要方法:
若使用HTTPS安全连接,则需要设置其属性为truesetMaxAge(int maxAge)设置存活时间,单位为秒如何使用呢,很方便,在ServletContextListener监听器初始化方法中进行设定即可;下面实例演示如何修改"JSESSIONID",以及添加支持HttpOnly支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 全局设置Session-Cookie相交互部分属性@WebListenerpublic 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会继续存在:
1 YONGBOYID=601A6C82D535343163B175A4FD5376EA; JSESSIONID=AA78738AB1EAD1F9C649F705E在所有浏览器中,SESSION ID等于新设置的YONGBOYID值(若不相等,问题就严重了!)
在客户端JS无法获得正确的SESSIONI ID了。
Tomcat服务器内置支持
可以不用如上显示设置Cookie domain、name、HttpOnly支持,在conf/context.xml文件中配置即可:
1 <Context useHttpOnly="true", sessionCookieName="YONGBOYID", sessionCookieDomain="/servlet3" … >...</Context>既然JAVA应用服务器本身支持会话Cookie设定,那就没有必要在程序代码中再次进行编码了。这是一个好的实践:不要重复造轮子。
这里给出一段测试Session重写的一段脚本:
1 <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了
很赞哦!(9)
相关文章
- Status、Creation Date、Expiration Date
- 新手程序员编程必不可少的9个工具,你用过几个?
- 我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?(内附源码)
- Ruby vs Golang:四个维度对比,到底谁更胜一筹?
- 打开https://www.aizhan.com/输入自己想要查询的域名然后按回车键,如果做过网站都会有数据显示出来
- 指纹识别是目前最成熟的识别技术!Python能分分钟做出一个来!
- 零基础准备学习编程,应该从哪门语言学起?
- 深度解析混合开发技术成熟度曲线
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 码农福音:一个专门开发高性能大数据代码的系统「开源了」