7.1、会话

会话: 用户打开浏览器, 点击了很多超链接, 访问了多个web资源, 关闭浏览器。这个过 程可以称之为会话
有状态的会话: 一个同学来过教室, 下次再来教室, 我们就会知道这个同学曾经来过, 称之 为有状态的会话
如何让服务端证明客户端来过?
①服务端给客户端一个"信件"(
Cookie
)下次访问服务端带上信件就可以了; Cookie
②服务器登记你来过了, 下次来就可以直接与服务器匹配; Session

7.2、保存会话的两种技术

cookie
客户端技术(响应、请求)
session
服务器技术: 利用这个技术, 可以保存用户的会话信息! 可以把信息或者数据放在 Session中!

常见场景: 网站登陆之后, 以后就会自动登录

7.3、Cookie

1.从请求中拿到cookie信息
2.服务器响应给客户端cookie
![image.png](https://img-blog.csdnimg.cn/img_convert/8274cbcd226a3441b595e800b71ed606.png#clientId=ucc7cfb0b-41d7-4&from=paste&height=441&id=UyqS0&margin=[object Object]&name=image.png&originHeight=513&originWidth=771&originalType=binary&ratio=1&size=172222&status=done&style=none&taskId=u940fb906-0b03-48d8-8d27-81824b7405d&width=662.5)

     Cookie[] cookies = request.getCookies();//服务器从客户端获取Cookiecookie.getName()//获得Cookie的健cookie.getValue()//获得Cookie的值Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");//新建一个Cookiecookie.setMaxAge(24*60*60);//设置Cookie有效期response.addCookie(cookie);//服务器给客户端发送一个Cookie

cookie:一般会保存在本地的 用户目录下appdata;

细节问题
一个Cookie只能保存一个信息
一个web站点可以给浏览器发送多个cookie, 最多存放20cookie
cookie大小限制为4kb
300个cookie浏览器上限

package com.servlet;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;
import java.io.PrintWriter;
import java.util.Date;@WebServlet(name = "Cookie_1", value = "/Cookie_1")
public class Cookie_1 extends HttpServlet {//保存用户上一次访问的时间@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//服务器, 告诉你,你来的时间, 把这个时间封装成为一个"信件"(Cookie), 你下次带来你我就知道你来了//解决中文乱码request.setCharacterEncoding("GBK");response.setCharacterEncoding("GBK");PrintWriter out = response.getWriter();//Cookie, 服务器端从客户端获取;Cookie[] cookies = request.getCookies();//Cookie可能有多个//判断Cookie是否存在if (cookies != null) {//如果存在out.print("你上次访问时间是: ");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//获取cookie的名字if (cookie.getName().equals("lastLoginTime")) {//获取cookie的值long lastLoginTime = Long.parseLong(cookie.getValue());Date date = new Date(lastLoginTime);out.print(date.toLocaleString());}}}//给服务器给客户端发送一个cookie(其实就是一个键值对)Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");response.addCookie(cookie);//设置Cookie的有效期cookie.setMaxAge(24*60*60);//有效期为一天}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

删除Cookie:
①不设置有效期, 关闭浏览器, 自动失效;
②设置有效期为0
③创建另一个Cookie手动删除

package com.servlet;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 = "Cookie_2", value = "/Cookie_2")
public class Cookie_2 extends HttpServlet {//保存用户上一次访问的时间@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//服务器, 清除原有的Cookie(Cookie_1)//解决中文乱码request.setCharacterEncoding("GBK");response.setCharacterEncoding("GBK");//创建一个Cookie, 名字必须与要删除的名字一致Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");cookie.setMaxAge(0);//有效期为0response.addCookie(cookie);//发送出去刷新lastLoginTime的cookie}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

编码解码问题

乱码解决方案: URLEncoder.encode("身伤易逝","utf-8")  //编码URLDecoder.decode(cookie.getValue(), "UTF-8");  //  解码

7.4、Session(重点)

什么是Session(会话):
①服务器会给每一个用户创建一个Session的对象
②一个Session独占一个浏览器, 只要浏览器不关 ,这个Session就一直存在;
③用户登录之后, 整个网站它都可以访问! 保存用户、购物车的信息……
![image.png](https://img-blog.csdnimg.cn/img_convert/f2197f10302a58a42e272c9abd2adcef.png#clientId=ucc7cfb0b-41d7-4&from=paste&height=379&id=ud46ad2d9&margin=[object Object]&name=image.png&originHeight=487&originWidth=732&originalType=binary&ratio=1&size=209843&status=done&style=none&taskId=uc5bcb4fb-d29d-44c3-99c9-985e9de4dbf&width=570)
使用场景:
①保存一个登陆用户的信息;
②购物车信息;
③在这个网站中经常会使用的数据, 我们将它保存在Session中;

获取Session:

        //服务器得到SessionHttpSession se = request.getSession();//给Session中存东西se.setAttribute("name", "身伤易逝");//存一个字符串Student stu1 = new Student("身伤易逝",19);se.setAttribute("stu1", stu1);//存一个对象//获取SessionIdString sessionId = se.getId();//判断Session是不是新创建if (se.isNew()) {response.getWriter().println("session创建成功" + sessionId);} else {response.getWriter().println("session已经在服务器存在,ID: " + sessionId);}

得到Session的信息:

//服务器得到SessionHttpSession se = request.getSession();String name = (String) se.getAttribute("name");Object stu1 = se.getAttribute("stu1");response.getWriter().println("name : " + name);//打印信息response.getWriter().println("stu1 : " + stu1.toString());//打印对象

移除Session及信息

        //服务器得到SessionHttpSession se = request.getSession();se.removeAttribute("name");//移除该信息//手动注销Sessionse.invalidate();//注销Session

Session自动过期

    <!--设置Session默认的失效时间--><session-config><!--15分钟后Session自动失效 以分钟为单位--><session-timeout>5</session-timeout></session-config>

7.5、Cookie与Session的区别

①Cookie是把用户的数据写给浏览器, 浏览器保存 (可以保存多个Cookie)
②Session把用户的数据写到用户独占的Seesion中, 服务器端保存 (保存重要的信息, 减少服务器资源的浪费)
③Session对象由服务创建;

7、Cookie与Session相关推荐

  1. 你想了解的Cookie和Session就在这~

    目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...

  2. Cookie和Session的区别与联系

    Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...

  3. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  4. cookie、session总结

    前几天在调试第三方支付接口时碰到一个session失效问题,用了几天时间才搞明白,现在回想一下,主要还是由于cookie和session这一块的一些基本概念没有搞清楚,现总结一下. 浏览器使用HTTP ...

  5. cookie 和session 的区别详解

    转自 https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者 ...

  6. web存储中cookie、session区别

    http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...

  7. cookie和session的代码实现

    cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...

  8. 还分不清 Cookie、Session、Token、JWT?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金   作者:秋天不落叶 juejin.im/po ...

  9. Token ,Cookie、Session傻傻分不清楚?

    点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...

  10. Flask之Cookie与Session

    Cookie与Session 1 Cookie 设置 from flask import Flask, make_responseapp = Flask(__name__)@app.route('/c ...

最新文章

  1. 隧道接口工具airtun-ng
  2. SSH隧道 / SSH穿透
  3. 微软亚洲研究院开源分布式机器学习工具包
  4. 程序员高薪盛宴背后:程序员正在消失?
  5. 《设计团队协作权威指南》—第1章1.3节甘为螺丝钉
  6. Java—TCP与HTTP连接
  7. leetcode 178. 分数排名(SQL)
  8. SPS :SPS 2003 安装过程中的语言版本问题。
  9. ES6精华:解构赋值
  10. 基于PaddlePaddle实现声纹识别
  11. ElasticJob‐Lite:事件追踪
  12. @DateTimeFormat 和 @JsonFormat 注解详解
  13. 用HTML语言编写下图所示网页,2019-02-21第一章 HTML基础
  14. 邮件实现详解(一)------邮件发送的基本过程与概念
  15. file-saver 实现文件下载
  16. 含有ex的linux自动化工具,增加Linux自动化(RH294)和红帽认证工程师考试(EX294),附介绍...
  17. Elasticsearch Guide[7.15]翻译 Aliases
  18. Java 中的判空操作
  19. Win10连接远程桌面失败
  20. 求n的阶乘的算法框图_算法——递归问题

热门文章

  1. java考勤管理系统源码java学生考勤请假系统java学生考勤管理系统 java考勤系统java学生信息管理系统java学生管理系统
  2. Linux篇9进程2
  3. java微信小程序 springboot美甲店铺座位预约系统
  4. 编程常用英语单词【2016.6月之前熟记要求会默写】
  5. XAudio2学习之混音
  6. python特效集合_python 集合操作方法详解
  7. Redis集群搭建【超详细】
  8. 阿里云国际站代理商:阿里云是干什么的?阿里云app和建网站有什么关系?
  9. linux oracle dblink,Oracle dblink配置
  10. 多租户系统数据存储方案