cookie session


一次会话,包含多次请求和响应 http协议:无状态的协议,同一个会话中的连续的多个请求是相互独立的彼此互不了解 会话技术:存储服务器和浏览器多次请求之间的数据 客户端: cookie,服务端 :session cookie 作用,在一次会话中多次请求中共享数据,存储在客户端 ## cookie使用 1. 设置cookie 对象,设置数据到cookie中 Cookie cookie = new Cookie(String name,String value); response.addCookie(cookie) 2. 从cookie 中获取数据,通过request对象,接受cookie数组 Cookie[] cookies = request.getCookies();

逻辑

  1. 第一次请求:没有携带任何cookie,响应头:set-cookie :name=jack
  2. 第二次请求:会携带浏览器本地存储的cookie
默认情况下
    浏览器关闭(会话结束)cookie销毁(内存)
设置cookie的存活时间
    cookie.setMaxAge(int second);--单位是秒
        正数:指定存活时间,持久化浏览器的磁盘中,到期后自动销毁
        负数:默认浏览器关闭,cookie销毁
        0:立即销毁
tomcat8之前,不支持中文
    URLEncoder 编码
    URLDecoder 解码
tomcat8 之后 支持中文
    rfc6265 cookie 规范,不允许使用分号,空格 等一些特殊符号
  1. cookie 存储数据部署在客户端
  2. cookie 存储数据只能是字符串
  3. cookie 单个大小不能超过4KB
  4. cookie 存储的数据不太安全

Session

在一次会话多次请求共享数据,存储在服务器中 session 会响应一个cookie : jessionId 第二次请求时 带上jessionId

HttpSession 也是一个域对象

  1. 存储数据 void setAttribute(String name,Object value)
  2. 获取数据 Object getAttribute(String name)
  3. 删除数据 void removeAttribute(String name)

逻辑

将数据存储到session中
    1. 通过request 对象获取session 对象
        httpSession session  = request.getSession();
    2. 操作session的API, 存储数据
        session.setAttribue("username","哈哈,呵呵")
从session 中获取数据
    1. 通过request对象,获取session对象
        HttpSession session = request.getSession();
    2. 操作session的API,获取数据
        session.getAttribute("username")

HttpSession session = req.getSession()进行判断 1. 如果用户第一次访问,创新新的session 对象进行编号 2. 如果不是第一次访问呢,根据浏览器发送请求携带的编号,找到session对象,如果没有找到,再创建

生命周期

  1. 何时创建 用户第一次调用request.getSession() 方法时创建
  2. 何时销毁 服务器非正常关闭, 非活跃状态30分钟后, Tomcat进行配置 session.invalidate();
  3. 作用范围 一次会话,多次请求之间 每个浏览器和服务器之间都是独立的对话