Cookie:浏览器端的会话技术
1.工作流程:用户去访问网站,服务器会产生了键值对的数据(cookie),业务完成之后,返回的时候,带上一个set-cookie的响应头,浏览器会将cookie保存在浏览器端,第二次去访问网站的时候,浏览器会根据一定的规则把cookie信息带上,通过cookie的请求头带上.
2.需要用到的api有:
Cookie c= new Cookie(“姓名”,”值”);
c.getName() c.getValue()
添加cookie: response.addCookie(c)
获取cookie: Cookie[] cookies=request.getCookies();先判空然后对数组进行循环,调用每个cookie的getName()方法找到目标cookie
3.持久化的cookie
设置超时时间:
setMaxAge(int 秒值)
如果设置为0会删除该cookie,删除同路径同名的cookie
设置路径:
setPath(“路径”) //你访问了一个网站,返回cookie的时候可以设置路径,第二次访问网站的时候,检查你第二次访问的地址是否是cookie的路径所包含,如果包含则带回去,否则不带回去
http://localhost/day12/aa/bb/cc
默认路径:
/day12/aa/bb/
以/带头+项目名/路径的目录名
规定路径:
以/打头 以/结束
4.Cookie限制:
1. cookie不能跨浏览器;
2. http协议对cookie有限制
3. cookie不支持中文
session:
保存在服务器端的会话技术:
1.工作流程:
第一次浏览器访问服务器,服务器检查是否携带了JSESSIONID的cookie
没有携带JSESSIONID
服务器会在内存中开辟一块空间(也就是创建一个session),并且会产生一个随机的唯一的ID代表这块空间,浏览器会保存该cookie,以后访问都带上.
携带着JSESSIONID
携带着JSESSIONID在session池中查找对应的session
找到了:
进行正常的业务操作,操作session,还会把SESSIONID带回来
找不到:
服务器会在内存中开辟一块空间(也就是创建一个session),并且会产生一个随机的唯一的ID代表这块空间,浏览器会保存该cookie,以后访问都带上.
2.Api:
Request.getSession() 获得session
操作session
Xxxattribute(“key”,”value”);
可以自定义key,value(setAttribute),获取sessiongetAttribute(字段名)
3.Session的生命周期:
在调用getSession()方法时候session就创建了
<session-config>
<session-timeout>30</session-timeout>设置session的超时时间
</session-config> 放置到自己项目的web.xml中
用方法设置过期时间:
setMaxInactiveInterval(int秒数) 以秒数为单位设置过期时间
手动销毁session
Session.invalidate()
服务器正常关闭 属于钝化
服务器非正常关闭
Session中存储的数据是私有的
面试中cookie和session的问题:
1.cookie和session的区别
1)cookie的数据存放在客户的浏览器上,session数据存放在服务器上;
2)cookie相对而言不是特别安全,黑客可以分析存放在本地的cookie进行cookie欺骗,考虑到安全应该使用session;
3)session在一定的时间内保存在服务器上,当访问增多,会大量占用服务器的性能,要考虑减轻服务器性能的话推荐使用cookie
4)单个cookie保存的数据不能超过4K,很多浏览器限制一个站点最多保存20个cookie
2.会话cookie和持久cookie的区别
1)如果不设置过期时间,则表示这个cookie的生命周期为浏览器会话期间,关闭浏览器窗口后,cookie就消失了,cookie也就不存在了,这种为会话cookie.会话cookie一般不保存在硬盘上而是保存在内存里;
2)如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭浏览器再打开,这些cookie依然有效直到超过设置的时间点;
3)存储在硬盘上的cookie可以在不同的浏览器中共享,对于保存在内存的cookie,不同的浏览器有不同的处理方式