Cooike与Session

Cooike与Session:

HTTP是一个无状态的协议,当一个客户端向服务端发送请求,在服务器返回响应后,连接就关闭了,在服务器端不保留连接信息。
思考:当客户端发送多次请求且需要相同的请求参数的时候,应该如何处理?

概念:

Cookie是一种在客户端保持HTTP状态信息的技术

Cookie是在浏览器访问服务器的某个资源时,由web服务器在响应头传送给浏览器的数据

浏览器如果保存了某个cookie,那么以后每次访问服务器的时候,都会在请求头传递给服务端

一个cookie只能记录一种信息,是key-value形式

一个web站点可以给浏览器发送多个cookie,一个浏览器也可以存储多个站点的cookie

服务端指控浏览器保存哪些数据,浏览器就保存哪些数据。

代码:

package com.wp.controller;/*
 *@author wupeng
 *@time 2021/6/22-10:05
Cookie:用来处理客户端发送不同请求的时候如何使用相同的参数信息
    特点:
    1.Cookie是保存在浏览器端的数据名称
    2.Cookie分类:临时cookie:默认存储在内存中,浏览器关闭的时候,Cookie自动失效
        持久化Cookie,保存在浏览器的某个存储目录,当时间过期之后,才会失效
    3.每一个cookie对象中保存一个key-value键值对的数据,想要存储多个kv键值对,需要存储多个cookie对象

 */

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/cookie")
public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("gbk");
        req.getParameter("name");


//        创建cookie对象
        Cookie cookie1 = new Cookie("00001","beijing");
        //将Cookie保存到浏览器中
        resp.addCookie(cookie1);
        //getCookie对象添加事件有效期,单位是秒
        cookie1.setMaxAge(3*24*3600);
        Cookie cookie2 = new Cookie("00002","shanghai");
        resp.addCookie(cookie2);
        //给Cookie设置固定路径值,设置某个cookie与某个请求路径有关
        cookie1.setPath("/cookie/abc");
       resp.getWriter().write("学习cookie");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

获取Cookie对象:

package com.wp.controller;/*
 *@author wupeng
 *@time 2021/6/22-10:35

 */

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/getcookie")
public class GetCookieServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("gbk");

        //获取Cookie对象
        Cookie[] cookies = req.getCookies();
        if(cookies.length > 0) {
            for(Cookie c : cookies) {
                String key = c.getName();
                String value = c.getValue();
                System.out.println(key+":"+value);
            }
        }
    }
}

实现免密登录:

1、用户发送验证cookie信息的请求,编写对应的servlet进行处理

2、如果包含cookie,直接跳转到成功页面

3、如果不包含cookie信息,直接跳转到登录页面

Session:

一个用户的不同请求的处理需要使用相同的数据怎么办

表示的是一种服务器端储存数据的技术

概念:

  • Session表示会话,在一段时间内,用户与服务器之间的一系列的交互操作
    • session对象:用户发送不同请求的时候,在服务器端保存不同请求共享数
      据的存储对象
  • 特点:
    • Session是依赖sessoin技术的服务器端的数据存储技术
    • 由服务器进行创建
    • 每个用户独立拥有一个session对象
    • 默认存储时间是30分钟

Session机制:

用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的Servlet进行处理。在处理过程中会给用户创建一个session对象,用来存储用户请求

处理相关的公共数据,并将此session对象的JSESSIONID 以sessoin的形式存储在浏览器中(临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请求时,

请求信息中会附带JSESSIONID,服务器在接收到请求后,调用对应的Servlet进行请求处理,同时根据JSESSIONID返回其对应的session对象

代码:

package com.wp.controller;/*
 *@author wupeng
 *@time 2021/6/22-20:38

 */

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/*
session:
作用:
    解决相同用户发送不用请求时的数据共享问题
    特点:
    1.服务器端存储共享数据的技术
    2.session需要依赖cookie技术
    3.每个用户对应一个独立的session对象
    4.每个用户session对象的有效时常是30分钟
    5.每次关闭浏览器的时候,重新请求都会开启一个新的session对象,因为返回JSeesion保存在浏览器的内存中,是临时cookie,所以关闭之后自然消失
    使用:
        创建sessoin对象
        HttpSession session = request.getSession()
        向Session对象中添加值
        sessoin.setAttribute(String name,Object object)
        获取Session中的值
        session.getAttribute(String name)
        设置sessoin属性
        session.setMaxInactiveInterval(5)//设置存活时间
        session.invalidate(); //session强制失效

 */

@WebServlet("/session")
public class SessionServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("接受到请求get");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("gbk");
        //如果上面设置编码不生效的话
        resp.setContentType("text/html:charset=utf-8");
        //获取Session对象
        HttpSession session = req.getSession();
        //设置session的有效时常
        session.setMaxInactiveInterval(5);
        //设置session强制失效


        //getid拿到JSessionid
        System.out.println(session.getId());
        resp.getWriter().write("Session");
        //5秒之后重新生成一个新的Session对象
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
posted @ 2021-06-23 22:16  IT小五  阅读(73)  评论(0)    收藏  举报