Session和Cookie

Posted 小王子jvm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session和Cookie相关的知识,希望对你有一定的参考价值。

Cookie

什么是 Cookie?

1、Cookie 翻译过来是饼干的意思。

2、Cookie 是服务器通知客户端保存键值对的一种技术。

3、客户端有了 Cookie 后,每次请求都发送给服务器。

4、每个 Cookie 的大小不能超过 4kb

程序演示:

protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException 
    //1 创建 Cookie 对象
    Cookie cookie = new Cookie("key4", "value4");
    //2 通知客户端保存 Cookie
    resp.addCookie(cookie);
    //1 创建 Cookie 对象
    Cookie cookie1 = new Cookie("key5", "value5");
    //2 通知客户端保存 Cookie
    resp.addCookie(cookie1);
    resp.getWriter().write("Cookie 创建成功");

服务器如何获取 Cookie

服务器获取客户端的 Cookie 只需要一行代码:Cookie[] cookies = req.getCookies():

每次请求服务器都会带所有的Cookie过来

Cookie 值的修改

方式一:同名Cookie覆盖

// 1、先创建一个要修改的同名的 Cookie 对象
// 2、在构造器,同时赋于新的 Cookie 值。
Cookie cookie = new Cookie("key1","newValue1");
// 3、调用 response.addCookie( Cookie ); 通知 客户端 保存修改
resp.addCookie(cookie);

方案二:修改数据在返回(推荐)

// 1、先查找到需要修改的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
if (cookie != null) 
// 2、调用 setValue()方法赋于新的 Cookie 值。
cookie.setValue("newValue2");
// 3、调用 response.addCookie()通知客户端保存修改
resp.addCookie(cookie);

Cookie 生命控制

Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)

setMaxAge() 方法:

  • 正数,表示在指定的秒数后过期
  • 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
  • 零,表示马上删除 Cookie
Cookie cookie = new Cookie("life3600", "life3600");
cookie.setMaxAge(60 * 60); // 设置 Cookie 一小时之后被删除。无效
resp.addCookie(cookie);
resp.getWriter().write("已经创建了一个存活一小时的 Cookie");

Cookie 有效路径 Path 的设置

Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。

path 属性是通过请求的地址来进行有效的过滤。

  • CookieA path=/工程路径
  • CookieB path=/工程路径/abc
  • 请求地址如下: http://ip:port/工程路径/a.html CookieA 发送 CookieB 不发送
Cookie cookie = new Cookie("path1", "path1");
// getContextPath() ===>>>> 得到工程路径
cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>> /工程路径/abc
resp.addCookie(cookie);
resp.getWriter().write("创建了一个带有 Path 路径的 Cookie");

Session 会话

什么是 Session 会话?

1、Session 就一个接口(HttpSession)。

2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。

3、每个客户端都有自己的一个 Session 会话。

4、Session 会话中,我们经常用来保存用户登录之后的信息。

如何创建 Session

如何创建和获取 Session。它们的 API 是一样的。 request.getSession() 第一次调用是:创建 Session 会话 之后调用都是:获取前面创建好的 Session 会话对象。 isNew(); 判断到底是不是刚创建出来的(新的)

每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。 getId() 得到 Session 的会话 id 值。

Session 域数据的存取

req.getSession().setAttribute("key1", "value1");和request使用一致,但是范围不同。

session作用域整个项目,这里设置了,可以在另外一个Servlet获取到

Session的实现是依赖于Cookie的。

Session 生命周期控制

public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。 值为正数的时候,设定 Session 的超时时长。 负数表示永不超时(极少使用)

public int getMaxInactiveInterval()获取 Session 的超时时间

public void invalidate() 让当前 Session 会话马上超时无效。

Session 默认的超时时间长为 30 分钟。

session的特点

session用于存储一次会话的多次请求的数据,存在服务器端

session可以存储任意类型,任意大小的数据

session与Cookie的区别:

	1. session存储数据在服务器端,Cookie在客户端
	2. session没有数据大小限制,Cookie有
	3. session数据安全,Cookie相对于不安全

以上是关于Session和Cookie的主要内容,如果未能解决你的问题,请参考以下文章

会话过程保存数据对象cookie和session

关于cookie和session

php学习笔记-会话控制简单介绍session和cookie

Python爬虫番外篇之Cookie和Session

Cookie和Session的那些事儿

session和cookie