前提
为什么需要 Cookie 和 Session,你必须了解 会话 和 http 协议;
会话
:为了实现某一个功能,客户端和服务器之间会产生多次的请求和响应,从客户端访问服务器开始,到最后访问服务器结束,客户端关闭为止,这期间产生的多次请求和响应加在一起就称之为是客户端和服务器之间的一次会话。(这就好像是你和朋友进行了一次会谈,这个会谈需要你和朋友进行对话,你是服务器,你朋友是客户端,你朋友发出请求,你的做出反应,会谈不可能是一句两句话,它会产生多种请求和响应,会谈提问结束,该过程就是一次会谈/会话)
HTTP协议
: http 协议中规定一次请求一次响应后断开连接,每一次请求都是一个崭新的请求,但是事实上,很多情况下都不可能一次请求一次响应解决你的问题(就好像你正在和朋友会谈一个问题,中途着急想去厕所必须离开,但是如果依据 HTTP协议,你重新回来的时候,就的从头开始问,那多浪费时间,所以出现了 Cookie 和 Session),Cookie 和 Session 就是类似解决这种方法,他会暂时存储临时数据,就是你去厕所回来之后,朋友继续讲就可以了。
Cookie
Cookie
: 将临时数据保存在客户端浏览器上,用户每次访问时,将会话的临时数据在请求中带给服务器;
原理
:Cookie 的原理是通过 Set-Cookie响应头 和 Cookie请求头 将会话中产生的数据保存在客户端,(客户端请求服务器,服务器其将需要保存的数据通过 Set-Cookie 响应头发给客户端,客户端收到后会将数据保存在浏览器的内部,当客户端再次请求服务器时,通过 Cookie 请求头将上次保存的数据在带给服务器,服务器通过 Cookie 头来获取数据,通过这种方式可以保存会话中产生的数据。)
优点
: Cookie 是将需要保存的数据保存在了客户端,是客户端技术,每个客户端各自保存各自的数据,再次访问服务器会带着自己的数据,每个客户端持有自己的数据,因此就不会胡乱了。
Cookie 操作
1.创建 Cookie
Cookie cookie = new Cookie(String name,String value);
2.添加 Cookie
response.addCookie(Cookie cookie);
3.获取 Cookie
Cookie [] cookie = request.getCookie();
4.存活 Cookie
setMaxAge();
5.路径 Cookie
setPath(String path);
实践(代码)
1.处理应答乱码
//通俗点理解记忆
// set 设置修改 contentType 内容类型
response.setContentType("text/html;charset=utf-8");
2.获取用户本次请求所携带的 Cookie 上一次访问时间
//首先再次理解 Cookie 原理:
//Cookie是通过 Set-Cookie响应头 和 Cookie请求头
//将会话的数据保存在客户端(Sssion是将数据保存在服务器)
//客户端请求服务器,服务器将需要保存的数据通过 Set-cookie响应头
//发给客户端,客户端收到后会将数据保存在浏览器的内部。
//当客户端再次请求服务器时,通过 Cookie请求头 将上次保存的数据在带给服务器,
//服务器通过 Cookie 获取数据
String lastname = request.getHeader("cookie");
3.返回信息
//lastime 就相当于上次保存的数据
if(lastime == null){
//如果lasttime 等于 null
//页面反应 您是第一次访问
response.getWriter().writer("您是第一次访问");
//将新访问的时间记录
String dateStr = new Date().toLocaleString();
//将新的时间存入到响应头中
response.setHeader("set-cookie",dateStr);
}else{
//如果存在 则输出 您上次访问的时间是 + 时间
response.getWriter().writer("您上次访问的时间是:"+ lastTime);
}