7、Cookie与Session
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相关推荐
- 你想了解的Cookie和Session就在这~
目录 1.会话的概念 2.保存会话的两种技术 3.Cookie 4.Session(重点) 1.会话的概念 我们知道session的意思就是会话,Cookie和Session 是两种会话技术,我们首先 ...
- Cookie和Session的区别与联系
Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Session的实现原理(重点) Session常用方法: Cookie 基本介绍 经典案例 ...
- 前端页面——Cookie与Session有什么区别
我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...
- cookie、session总结
前几天在调试第三方支付接口时碰到一个session失效问题,用了几天时间才搞明白,现在回想一下,主要还是由于cookie和session这一块的一些基本概念没有搞清楚,现总结一下. 浏览器使用HTTP ...
- cookie 和session 的区别详解
转自 https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者 ...
- web存储中cookie、session区别
http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的.为了使得web能够产生一些动态信息,就需要保存"状态",而cookie和session机制就是为了解决http ...
- cookie和session的代码实现
cookie和session的代码实现 1.设置cookie 今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀. 我们来看如何在response设置吧 pu ...
- 还分不清 Cookie、Session、Token、JWT?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金 作者:秋天不落叶 juejin.im/po ...
- Token ,Cookie、Session傻傻分不清楚?
点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...
- Flask之Cookie与Session
Cookie与Session 1 Cookie 设置 from flask import Flask, make_responseapp = Flask(__name__)@app.route('/c ...
最新文章
- 隧道接口工具airtun-ng
- SSH隧道 / SSH穿透
- 微软亚洲研究院开源分布式机器学习工具包
- 程序员高薪盛宴背后:程序员正在消失?
- 《设计团队协作权威指南》—第1章1.3节甘为螺丝钉
- Java—TCP与HTTP连接
- leetcode 178. 分数排名(SQL)
- SPS :SPS 2003 安装过程中的语言版本问题。
- ES6精华:解构赋值
- 基于PaddlePaddle实现声纹识别
- ElasticJob‐Lite:事件追踪
- @DateTimeFormat 和 @JsonFormat 注解详解
- 用HTML语言编写下图所示网页,2019-02-21第一章 HTML基础
- 邮件实现详解(一)------邮件发送的基本过程与概念
- file-saver 实现文件下载
- 含有ex的linux自动化工具,增加Linux自动化(RH294)和红帽认证工程师考试(EX294),附介绍...
- Elasticsearch Guide[7.15]翻译 Aliases
- Java 中的判空操作
- Win10连接远程桌面失败
- 求n的阶乘的算法框图_算法——递归问题