在将cookie 和 session 以前须要先理解什么是会话
会话:
用户打开一个浏览器,点击多个超连接,访问多个web资源,而后关闭浏览器,整个过程称为一个会话。
http协议是无状态的,一旦数据交换完毕,客户端与服务器端的链接就会关闭,再次交换创建新的链接,也就是说,服务器没法跟踪会话。而cookie 和 session 就是用与解决这种问题。
1.什么是cookie
cookie是客户端的技术,程序把每一个用户数据以cookie的形式写给用户各自的浏览器,当客户端再次访问服务器的时候,会带着各自的Cookie过来,这样服务器就能处理各自用户的数据了
1.1. 如何使用cookieweb
Cookie cookie = new Cookie("name","value"); //建立一个cookie cookie.setPath("/"); //cookie记得必定要设定路径,默认是当前的类的路径,设置/表明是整个web应用。 cookie.setMaxAge(""); //设置有效期限,默认是浏览器的进程,也就是浏览器关了,就没了。若是是设置为负数,那么cookie不会被存储,而且会被删除。若是设置为0,那么cookie会被删除。(这些内容在API上描述得很是清楚) response.addCookie(cookie);//添加cookie,这样才能回写给客户端
以上的内容就是关于如何去使用一个cookie了。
1.2. cookie的细节
根据API的描述,一个cookie最大为4KB.浏览器通常只容许存放300个cookie,每一个站点最多存放20个Cookie。Cookie被建立的时候默认使用Verssion 0 ,也就是http 1.0
1.2.1 cookie的删除
在cookie的API中没有删除cookie的具体方法,可是咱们能够经过设置cookie的生命周期,来说cookie删除,设置为0表明删除(详解自行查看setMaxAge()方法)数组
cookie.setMaxAge(0); 若是说不想从request域中获取cookie,而后将该cookie的生命周期设置为0,能够采用如下这个方法 Cookie cookie = new Cookie("想删除的cooki名字","value"); cookie.setPath("");//此处路径必须与想删除的cookie一致 cookie.setMaxAge(0); response.addCookie(cookie);
1.3 cookie的获取浏览器
request.getCookies(); //返回的是cookie的数组
以上就是cookie的经常使用方法。tomcat
1.4 cookie设置注释安全
cookie.setComment("comment")
1.5 cookie 设置安全传输协议(例如 https ,ssl)服务器
cookie.setSecure(true|false) 默认为false
1.6 cookie 防止 xss(跨站脚本攻击) 攻击cookie
cookie.setHttpOnly(true) // 高版本的 servlet Api中有提供此方法
当将httpOnly设置为true时,将没法经过js脚本获取cookie信息。可以有效的防止xss攻击session
2.什么是session
session是服务端的技术,当浏览器第1次访问web资源的时候,服务器会自动为其建立一个session,并保存在服务器,当须要保存用户数据的时候,能够将数据写入session中。当用户访问其余程序的时候,就能够直接从session中取值。值得一提的是sesion是创建在cookie的基础上建立的。xss
2.1 session实现原理
session的实现原理是创建在给浏览器回写cookie,而且是以JSESSIONID为键,可是这个cookie是没有时间的,也就是说,当你关闭浏览器时,表明一个会话结束了,也就是说你的session会被删除,当你再次访问服务器的时候,服务器会为你从新建立一个session。url
2.2 session的使用
2.2.1 客户端不由用cookie的状况
HttpSession session = request.getSession();//客户端访问服务器的时候,服务器会自动建立一个session,若是客户端没有禁用cookie的话。 String sessionId = session.getId(); Cookie cookie = new Cookie("JSESSIONID",sessionId); cookie.setPaht("/"); cookie.setMaxAge(30*60);//注意在tomcat的web.xml文件中,设置了session的生命周期最长为30分钟。 response.addCookie(cookie); session.setAttribute("key","value");
2.2.2 客户端禁用cookie的状况
若是客户端禁用cookie,那么须要调用response的encodeURL("转发的地址") HttpSession session = request.getSession(); String url1 = response.encodeURL("xxxx");//注意,调用这个方法以前,必需要先获取session,(在该方法的API描述得很清楚) PrintWriter pw = response.getWriter(); pw.write(url1);
2.3 session的一些细节
设置session的生命周期
能够经过设置配置文件的形式,设置session的生命周期;在web.xml文件中添加以下代码
<session-config> <session-timeout>30</session-timeout>//备注这里是以分钟为单位 </session-config>
参考如下2篇博文:
https://my.oschina.net/kevina... 深刻源码剖析了session和cookie
http://blog.csdn.net/fangaoxi... 介绍了一些基本的知识