cookie和session基础知识学习(一)

笔者对于cookie和session也是初学,写这篇文章的主要目的是方便自己去理解cookie和session的相关内容,所以有些描述并不是那么专业和全面,请多多包涵。

一、会话技术

一次会话过程指的是会从打开浏览器到关闭浏览器的过程,在此过程中包含多次请求响应,会话指的就是这些请求和响应。
由于HTTP是无状态的协议,每一次的请求和响应都是相互独立的。而在实际的操作中,完成一些比较复杂的功能时需要在多次不同的请求和响应之间交互。所以为了使不同请求和响应之间能够交互,便产生了会话技术
会话技术主要有两类:

  • cookie
    cookie是客户端技术,程序把每个用户的数据以cookie的形式保存到各自客户端浏览器中。当用户使用浏览器再次访问服务器中的web资源的时候,就可以从自己保存的cookie里面获取一些有用信息。

  • session
    session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的session对象。由于session为用户浏览器独享,所有用户在访问服务器的时候,可以把各自的数据放在各自的session中,当用户再次访问服务器中的web资源的时候,其他web资源再从用户各自的session中取出数据为用户服务。

二、cookie的简单使用

cookie是客户端会话技术,将数据保存到客户端。
cookie就是一串字符串,格式就是键值对,用分号隔开。使用cookie时,调用Java自带的相应的API即可。
使用cookie的步骤如下:

  • 创建cookie对象,绑定数据
  • 发送cookie对象
  • 获取cookie对象,得到数据

下面是一个简单实例的完整代码,CookieTest1创建并发送cookie,CookieTest2获取cookie。

  • CookieTest1
package com.study.cookieandsessionstudy;

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(name = "CookieTest1", value = "/CookieTest1")
public class CookieTest1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //创建cookie 注意这里穿的value字符不要加空格,addCookie时是不能使用空格的
        Cookie cookie = new Cookie("msg", "hello-world");

        //发送cookie
        response.addCookie(cookie);
    }

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

    }
}
  • CookieTest2
package com.study.cookieandsessionstudy;

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(name = "CookieTest2", value = "/CookieTest2")
public class CookieTest2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取cookie
        Cookie[] cookies = request.getCookies();

        String name;
        String value;

        if (cookies != null) {
            for (Cookie cookie : cookies) {
                name = cookie.getName();
                value = cookie.getValue();
                System.out.println("name:" + name);
                System.out.println("value:" + value);
            }

        }

    }

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

        this.doPost(request, response);

    }
}

三、使用cookie的原理

cookie保存下来之后是要通过HTTP协议进行传输的,若对HTTP了解的话便会知道请求和响应有对应的头,而cookie对应的头为Set-CookieCookie

  • Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie。
    Set-Cookie的格式:
Set-Cookie: <name>=<value>[; <name>=<value>]...
                    [; expires=<date>][; domain=<domain_name>]
                    [; path=<some_path>][; secure][; httponly]
                    
  • Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。

在这里插入图片描述

2019.12.22

发布了52 篇原创文章 · 获赞 59 · 访问量 6822

猜你喜欢

转载自blog.csdn.net/ataraxy_/article/details/103655059