Cookie详解
Cookie是什么?
Cookie是可以将会话状态保存起来并且是保存在浏览器客户端上的一种数据
cookie:
- cookie就是数据但是只要cookie被清除或者是cookie过期这个会话状态就没有了
- cookie是保存在浏览器的客户端上的,就是保存在浏览器的缓存中浏览器关闭cookie也就消失了
- cookie也可以保存在客户端的硬盘文件中浏览器关闭cookie依旧还在直到cookie过期
cookie在客户端和浏览器交互过程中的运行流程
当客户端首次请求服务器的时候如果服务器端需要会话状态保存就会在服务器的响应response添加上cookie对象,客户端将cookie保存到浏览器缓存中或者硬盘文件中。当再次提交该请求时客户端会将cookie携带给服务器,服务器接收cookie识别会话信息服务器还可以修改cookie
cookie什么时候保存在浏览器缓存中什么时候保存至浏览器客户端硬盘文件中?
cookie在Java中是一个类Cookie类,该类所在位置是javax.servlet,http,Cookie在该类中有一个方法public void setMaxAge(int expiry) 该方法的作用是设置cookie的有效时长,设置了有效时长之后该cookie就会被保存到浏览器客户端的硬盘文件中
有效时长=0 cookie会被直接删除 也就是一存储到硬盘中就马上被删除
有效时长<0 cookie不会被存储
有效时长>0 存储在硬盘文件中
没有设置有效时长的cookie会默认被保存在浏览器的缓存中只要浏览器不关闭就一直存在,浏览器一关闭就立即消失
如何生成cookie对象以及如何将cookie发送到客户端???
在Javaweb中Cookie就算Java中的一个类和生成Java对象一样生成cookie对象
Cookie cookie = new Cookie(String name,String value);
Cookie类中只有一个有参构造,两个参数分别为name和value
也就是cookie中存储的都是字符串类型的键值对
在Javaweb中使用HttpServletResponse 接口中的addCookie方法可以将cookie发送到客户端
/**
* Adds the specified cookie to the response. This method can be called
* multiple times to set more than one cookie.
*
* @param cookie the Cookie to return to the client
*
*/
//这段注释的意思就是将指定的cookie添加到响应中,并且可以多次调用设置多个cookie
//方法的参数就是返回给客户端的cookie对象
public void addCookie(Cookie cookie);
服务器端如何获取浏览器客户端发送来的cookie???
在Javaweb中浏览器客户端发送来的请求被封装为了一个实现了javax.servlet.http.HttpServletRequest接口的request对象同时cookie也被封装在该对象中
接口HttpServletRequest接口中有一个 public Cookie[] getCookies() 方法该方法的作用就是获取所有客户端传来的cookie
请求怎么确定属于该请求的cookie???
请求路径和cookie紧密关联
不同的请求路径会提交不同的cookie
当首次请求服务器的时候如果服务器有保存会话状态的需求就必须将cookie保存到浏览器客户端缓存中该cookie代表的是本次请求的cookie对象存储的是本次请求的会话状态,当客户端浏览器再次发送该请求时携带的也应该是该cookie而不能是其他请求的cookie。
当服务器将cookie保存到浏览器客户端的时候已经将cookie与当前的请求路径绑定在一起了只有浏览器客户端再次发送相同的请求时才会携带该cookie
- cookie绑定请求路径的规律 例如请求路径为webApplication/aaa/bbb/则该cookie绑定的路径就是webApplication/aaa/ 只要请求中有这个路径就会携带该cookie 就算当前路径的父路径下面的所有子路径都可以
- javax.servlet,http,Cookie类中的public void setPath(String uri)方法可以指定cookie绑定的路径
cookie只在Javaweb中有吗???
cookie不止在javaweb中有只要web开发只要B/S架构的系统,只要基于HTTP协议就有cookie的存在cookie这种运行机制是HTTP协议规定的
浏览器禁用cookie
表示服务器发送过来的cookie浏览器不会接收
但是服务器还是会发送,只不过浏览器不接收而已
本文地址:https://blog.csdn.net/weixin_43621226/article/details/111875407