Cookie与Session一些基础知识

1 篇文章 0 订阅
1 篇文章 0 订阅

Cookie与Session一些基础知识

首先,我们先了解什么是会话,再来说说什么是Cookie和Session:

会话技术: 所谓的会话过程就是指从打开浏览器到关闭浏览器的过程,在一次会话中包含了多次请求和响应。

  • 例如一次会话的过程:打开一个web页面进行浏览,点击页面中多个超链接,访问了多个Web资源,然后关闭浏览器,整个过程就为一个会话。
  • 功能:在一次会话的范围内的多次请求间,共享数据。
  • 实现方式:
  1. Cookie:客户端会话技术。作用:将数据保存到客户端。
  2. Session:服务器端会话技术。作用:在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

接下来我们说说为什么要使用Cookie和Session:

我们在前面servlet学习知道,http是无状态的协议,我们在客户端每次读取web页面时,服务器都打开新的会话,但是服务器无法确定这次请求和上次的请求是否来自同一个客户端,也不会自动处理客户多次请求之间的信息和联系。在这个时候,我们利用Session和Cookie就可以让服务器知道不同的请求是否来自同一个客户端。好比如说我们要在某宝的购物车添加或删除商品,但购物页面是一个服务器端的共享空间,当别人去购买东西时,也把商品添加到购物车,这时这个购物车相当于共有的东西,你去购物车结算的时候,就包括了自己和别人共同的东西。因此就需要使用到Cookie和Session技术去解决这个问题,来保存多个用户访问服务器产生了各自的数据。

一、Cookie技术:

先举个例子:例如我要在某宝网页上买一部手机,我选好了要把它加入购物车,这个时候服务器就会把手机这个对象存入了已经开辟好的Cookie空间中, Cookie空间会为这个手机对象绑定一个唯一的标识,然后以响应头方式返回给客户端。因为Cookie域保存在自己浏览器内部,与别人互不干扰,所以这个标识会保存在这个浏览器客户端中。当我去购物车去下单的时候,服务器就会从浏览器中把这个唯一标识以请求头的方式重新存入到Cookie空间,同时为它绑定唯一的标识。这样子就可以避免多个用户之间所产生的信息造成混乱。但因为是客户端技术,所以安全性并不高。

Cookie技术的特点:

  1. Cookie存储数据在客户端浏览器。
  2. 浏览器对于单个Cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)。

Cooike快速入门(这里分成两个项目来执行):

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;
/**
 *
 * Cookie快速入门,要转去CookieDemo2实践(先实践当前这个,再实践CookieDemo2)
    * 使用步骤:
        1. 创建Cookie对象,绑定数据
            * new Cookie(String name, String value)
        2. 发送Cookie对象
            * response.addCookie(Cookie cookie)
        3. 获取Cookie,拿到数据
            * Cookie[]  request.getCookies()*/
         
@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.创建Cookie对象
        Cookie c = new Cookie("msg","hello");
        //2.发送Cookie
        response.addCookie(c);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
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;

/**
 *
 * Cookie快速入门
 *
 */

@WebServlet("/cookieDemo2")
public class CookieDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //3. 获取Cookie
        Cookie[] cs = request.getCookies();
        //获取数据,遍历Cookies
        if(cs != null){
            for (Cookie c : cs) {
                String name = c.getName();
                String value = c.getValue();
                System.out.println(name+":"+value);
            }
        }
    }

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

二、Session技术:

这个和Cookie一样,同样去买一部手机,这个时候就会把手机这个对象存入已经开辟的Session空间中, Session空间为此对象生成一个唯一的Key值,因为Session域同样保存在自己浏览器内部,与别人互不干扰,所以这个Key值也会保存在这个浏览器客户端中。当我去购物车去下单的时候,服务器就会从浏览器中把这个Key值存入到Session空间中,同时为它绑定唯一的Key值。相较于Cookie而言Session技术是服务器技术,较为安全。

session的特点:

  1. session用于存储一次会话的多次请求的数据,存在服务器端
  2. session可以存储任意类型,任意大小的数据

Session快速入门(这里分成两个项目来执行):

/**
 *
 * session快速入门,此处要转去SessionDemo2实践(先实践当前这个,再实践SessionDemo2)

 * 方法:
    1. 获取HttpSession对象:
        HttpSession session = request.getSession();

    2. 使用HttpSession对象:
        Object getAttribute(String name)
        void setAttribute(String name, Object value)
        void removeAttribute(String name)

    3. 原理:
        * Session的实现是依赖于Cookie的。
  */


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;

@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用session共享数据

        //1.获取session
        HttpSession session = request.getSession();
        //2.存储数据
        session.setAttribute("msg","hello session");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
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;

@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用session获取数据

        //1.获取session
        HttpSession session = request.getSession();
        //2.获取数据
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }

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

总结:

Session与Cookie的区别:

  1. session存储数据在服务器端,Cookie在客户端;
  2. session没有数据大小限制,Cookie有;
  3. session数据安全,Cookie相对于不安全的区别:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值