javaweb(10) cookie&session

javaweb(10) cookie&session

cookie

什么是cookie

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

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

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

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

如何创建cookie

  1. 创建cookie对象
  2. 通知客户端保存cookie

示意图:

image-20200818164147500

示例代码:

image-20200818164213663

服务器如何获取cookie

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

示意图:

image-20200818164406007

获取指定cookie的工具类:

image-20200818164442538

获取示例:

image-20200818164529006

cookie值的修改

方式一

1、先创建一个要修改的同名(指的就是 key)的 Cookie 对象

2、在构造器,同时赋于新的 Cookie 值。

3、调用 response.addCookie( Cookie );

方式二

1、先查找到需要修改的 Cookie 对象

2、调用 setValue()方法赋于新的 Cookie 值。

3、调用 response.addCookie()通知客户端保存修改

代码示例

image-20200818164728098

cookie的生命控制

控制方法

通过setMaxAge()进行控制:

正数,表示在指定的秒数后过期

负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)

零,表示马上删除 Cookie

示例

查看默认的过期时间:

image-20200818164936966

设置cookie的过期时间:

image-20200818165010237

立即删除cookie:

image-20200818165035022

cookie有效路径path的设置

image-20200818165119015

示例代码:

image-20200818165140052

以上及后面示例代码基于BaseServlet:

public abstract class BaseServlet extends HttpServlet {
    
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("UTF-8");
        //解决响应乱码
        response.setContentType("text/html; charset=UTF-8");
        String action = request.getParameter("action");
        try {
    
    
            Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
            method.setAccessible(true);
            method.invoke(this,request,response);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        doPost(request, response);
    }
}

session

什么是session

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

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

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

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

如何创建session和获取(id,是否为新)

如何创建和获取 Session。它们的 API 是一样的。

request.getSession()

第一次调用是:创建 Session 会话,之后调用都是:获取前面创建好的 Session 会话对象。

isNew(); 判断到底是不是刚创建出来的(新的)

true 表示刚创建

false 表示获取之前创建

每个会话都有一个身份证号。也就是 ID 值。而且这个 ID 是唯一的。

getId() 得到 Session 的会话 id 值。

session域数据的存取

存储:req.getSession().setAttribute(“key1”, “value1”);

取出:req.getSession().getAttribute(“key1”)

session的生命控制

超时的概念

session的超时指的是,客户端两次请求的最大间隔时长

image-20200818170959036

生命控制

public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时Session就会被销毁。

值为正数的时候,设定 Session 的超时时长。

负数表示永不超时(极少使用)

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

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

默认时长

image-20200818171130747

设置默认时长

image-20200818171209341

浏览器和 Session 之间关联的技术内幕

浏览器第一次发请求时,服务器会调用reques.getSession创建会话对象,并通过响应把session对象的id通过cookie的方式保存传给浏览器;浏览器再次发请求时,服务器响应传给保存session的id的cookie即可,无需再次创建session对象,除非改cookie被删除或者过期(关闭浏览器)

image-20200818171728179

猜你喜欢

转载自blog.csdn.net/weixin_45834777/article/details/108082664