cookie

Cookie

  • session的实现原理中,每一个session对象都会关联一个sessionid,例如
    - JSESSIONID=41C48F022SD2JSDASD
    - 以上这个键值对数据其实就是cookie对象
    cookie_第1张图片
    - 浏览器第一次访问,Tomcat生成session对象,生成sessionid,把他们发给浏览器,浏览器把他们保存起来,是以cookie的形式保存的
    - 对于session关联的cookie来说,这个cookie是被保存在浏览器的运行内存中,只要浏览器不关闭,用户发送请求的时候,会自动将运行内存中的cookie发送给浏览器
    - 服务器根据JSESSIONID找到对应的session对象
    cookie_第2张图片
  1. cookie怎么生成?保存在什么地方,有什么用?浏览器什么时候会发送cookie,发送哪些cookie给服务器?
    - - cookie最终是保存在浏览器客户端上,可以保存在运行内存中(浏览器关闭则消失),也可以保存在硬盘文件上(永久保存)

  2. cookie有啥用?
    - cookie和session机制其实都是为了保存会话的状态
    - cookie是将会话的状态保存在浏览器客户端上(cookie数据存储在浏览器客户端上);session是将会话的状态保存在服务器上(session对象是存储在服务器上)
    - 为什么有cookie和session机制?
    - 因为HTTP是无状态无连接协议

  3. cookie的经典案例
    ① 京东商城在没有登录的情况下,向购物车加几件商品,然后关闭商城,再次打开浏览器,访问京东商城的时候,购物车中的商品还在,这是怎么做的?(现在都需要登录)
    - 其实就是将每一个商品编号以cookie的形式保存到我们的硬盘文件中,这样即使关闭浏览器,硬盘上的cookie还在,下一次再打开京东商城的时候,查看购物车的时候,会自动读取本地硬盘中存储的cookie,拿到商品编号,动态展示购物车中的商品
    - 注意cookie如果清除掉购物车的物品就消失了
    ② 126邮箱中有一个功能:10天内免登录
    - 这个功能也是cookie实现的
    - 怎么实现的?登录时候将你的账号和密码保存到cookie中,然后将cookie保存到硬盘文件中,10天内再次访问时候,浏览器自动提交126的关联的cookie给服务器,服务器接收到cookie后,获取用户名和密码,验证通过后,自动登录。
    - 怎么让cookie失效?
    Ⅰ 改密码 Ⅱ 在浏览器上清除 Ⅲ十天后自动失效

  4. cookie机制和session机制其实都不属于java中的机制,实际上cookie机制和session机制都是HTTP协议的一部分,php开发中也有cookie和session机制,只要你要web开发,不管是什么编程语言,cookie和session机制都是需要的

  5. HTTP协议中规定任何一个cookie都是由name和value组成的,name和value都是字符串类型

在java的servlet中对cookie提供哪些支持?
1. 提供一个cookie类,专门表示cookie数据。jarkata.servlet.http.Cookie;(只有有参构造)
cookie_第3张图片
6. java程序怎么把cookie数据发送给浏览器的呢?

response.addCookie(cookie);
  1. 关于cookie的有效时间(java设置)
//设置cookie在一小时后失效
cookie.setMaxAge(60 * 60);

没有设置有效时间,默认保存在浏览器的运行内存中,浏览器关闭则cookie消失,- 只要设置cookie的有效时间>0,这个cookie一定会存储到硬盘文件中;- 有效时间等于0,表示该cookie被删除,主要应用在:使用这种方式删除浏览器上的同名cookie; - 有效时间<0表示该cookie不会被存储(表示不会被存储到硬盘文件上,会放到浏览器运行内存当中,和不调用sexMaxAge是同一个效果)。

  1. 关于cookie的path,cookie关联的路径:
    - 假设现在发送的请求路径是 “http://localhost:8080/servlet13/cookie/generate”生成的cookie,如果 cookie没有设置path,默认的path是什么?
    - 默认的path是:http://loaclhost:8080/servlet13/cookie以及他的子路径
    - 也就是说,以后只要浏览器的请求路径是http://locahost:8080/servlet13/cookie这个路径以及这个路径下的子路径,cookie都会被携带到服务器
//也可以手动设置应用的根路径
cookie.setPath("/servlet13");

在这里插入图片描述
只要url中根路径是"/servlet13",cookie都能提交给服务器
cookie_第4张图片

  1. 浏览器发送cookie给服务器,服务器中的java程序怎么接收?
    • 通过request对象,(返回值是一个数组,因为浏览器可能会提交多个cookie给服务器,没有cookie返回null)
Cookie[] cookies=request.getCookies();
//如果不是null,一定有cookie
if(cookies!=null)
{
	for(Cookie cookie : cookies)
	{
	//遍历cookie,获取cookie的name和value
		String name=cookie.getName();
		String value=cookie.getValue();
		System.out.println(name+"="+value);
	}
}

你可能感兴趣的:(java)