第九节 Cookie与Session

目录

  • 第九节 Cookie与Session
    • 9.1 会话
    • 9.2 Cookie
    • 9.3 Session

9.1 会话

会话:用户打开一个浏览器,点了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话:一个客户端访问过服务端,下次再访问时,服务端会知道这个客户端访问过

一个网站,怎么证明客户访问过?(客户端->服务端)

  1. 服务端给客户端一个信件,客户端下次访问服务端带上这个“信件”即可->cookie
  2. 服务器登记了客户端来过,下一次客户端再访问时进行匹配->session

保存会话的两种技术

cookie:一种客户端技术(请求和响应)

session:一种服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息和数据放在session中

常见实例:访问过一个网站,下一次不用再登录就可以直接访问

9.2 Cookie

  • 从请求中拿到cookie //Cookie[] cookies = req.getCookies();
  • 服务器响应给客户端cookie //resp.addCookie(new Cookie(“lastLoginTime”,System.currentTimeMillis()+""));

典例:保存用户的上一次访问时间

//保存用户上一次访问的时间
public class cookie extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器告诉你来的时间,把那个时间封装成一个信件,你下一次带着信件来,服务器就知道你来了req.setCharacterEncoding("utf-16");resp.setCharacterEncoding("utf-16");PrintWriter writer = resp.getWriter();//Cookie是服务器从客户端获取的Cookie[] cookies = req.getCookies();    //返回一个数组,说明cookie存在多个//先判断Cookie是否存在if(cookies!=null){//如果存在writer.write("你上一次访问的时间为:");for(int i=0;i<cookies.length;i++){Cookie cookie = cookies[i];//获取cookie的名字if(cookie.getName().equals("lastLoginTime")){//获取cookie中的值long l = Long.parseLong(cookie.getValue());Date date = new Date(l);writer.write(date.toLocaleString());}}}else {writer.write("这是你第一次访问本站");}//服务器给客户端响应一个cookieresp.addCookie(new Cookie("lastLoginTime",System.currentTimeMillis()+""));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}
}

启动测试


如果关闭浏览器,则上一次访问的时间将会改变,不再保存,但是可以通过设置有效期使上一次访问的时间在有效期内保存,即浏览器关闭cookie仍然存在

//cookie有效期为一天
cookie.setMaxAge(24*60*60);

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

关于Cookie的删除:

  • 不设置有效期,关闭浏览器自动删除
  • 设置有效期为0

注意:在通信时如果存在中文,最好使用这种方式:编码URLencoding.encode(“你好世界”,“utf-8”),解码URLDecoder.decode(“你好世界”,"utf-8’’)

9.3 Session

Session简介:服务器会为每一个用户(浏览器)创建一个Session对象,一个Session独占一个浏览器,即只要浏览器没有关闭,这个Session就存在

用户登录之后,整个网站都可以访问–>保存用户信息(保存购物车等)

典例:通过session获取一个类的信息

访问/session存储信息

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("utf-16");resp.setCharacterEncoding("utf-16");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//给session存储数据session.setAttribute("name",new person("srq",520));//获取session的idString id = session.getId();//判断是否是新的sessionif(session.isNew()){resp.getWriter().write("新的session已创建,新的session的id为:"+id);}else {resp.getWriter().write("session已经存在,新的session的id为:"+id);}//Session创建的时候做了什么事情
//        Cookie cookie = new Cookie("JSESSIONID",id);
//        resp.addCookie(cookie);}

访问/s2打印信息

    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码问题req.setCharacterEncoding("utf-16");resp.setCharacterEncoding("utf-16");resp.setContentType("text/html;charset=utf-8");//得到SessionHttpSession session = req.getSession();//获取Session数据person name = (person) session.getAttribute("name");System.out.println(name.toString());}

启动测试

Session的注销

在java文件中注销

session.invalidate();

在配置文件中注销

<!--  设置Session的默认失效时间--><session-config>//15min后session自动失效<session-timeout>15</session-timeout></session-config>

Session与Cookie的区别

Cookie:把用户的数据写给用户的浏览器(保存多个信息)

Session:把用户的数据写在用户独占的Session中(保存重要的信息),由服务器创建

使用场景:保存用户登录信息,保存购物车信息


如果文章对您有所帮助,记得一键三连支持一下哦~

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session相关推荐

  1. Web后端学习笔记 Flask(9)cookie and session

    Flask_wtf除了可以做表单验证,模板渲染之外,还可以防御CSRF攻击.要了解CSRF攻击的原理,首先需要了解cookie和session的知识点. cookie:在网站中,HTTP请求是无状态的 ...

  2. Spring学习笔记-狂神版

    1|0前言 Mybatis学完开始学Spring 同样先放上参考文档,现在只是需要短时间之内要过一下基础,等考完研再看要不要深入学习吧. B站 https://www.bilibili.com/vid ...

  3. B站狂神说JavaWeb学习笔记

    JavaWeb学习笔记(根据b站狂神说java编写) 1.基本概念 1.1 前言 静态Web: 提供给所有人看数据不会发生变化! HTML,CSS 动态Web: 有数据交互,登录账号密码,网站访问人数 ...

  4. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  5. JavaWeb学习笔记(软件系统体系结构、Tomcat、Web应用、HTTP协议)

    JavaWeb学习笔记 JavaWeb学习笔记 软件系统体系结构 常见软件系统体系结构C/S.B/S Web资源 Web服务器 Tomcat Tomcat概述 安装.启动.配置Tomcat Web应用 ...

  6. JavaWeb学习笔记2 —— Web服务器简介

    JavaWeb学习笔记2 -- Web服务器简介 参考教程B站狂神https://www.bilibili.com/video/BV12J411M7Sj 相关技术 ASP: 微软:国内最早流行的就是A ...

  7. JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)

    数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...

  8. JavaWeb学习笔记(十)--HttpServletRequest

    1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...

  9. JavaWeb学习笔记-目录(待完成)

    JavaWeb学习笔记-目录(待完成) 01-基础加强(注解+反射) 02-mysql基础 03-mysql约束 04-mysql多表事务 05-jdbc 06-jdbc连接池JDBCTemplate ...

最新文章

  1. 如何允许计算机远程桌面连接,远程桌面 - 允许访问你的电脑
  2. CF1097D Makoto and a Blackboard(期望)
  3. 在现有K8S集群上安装部署JenkinsX
  4. redis -memcahe-mongo资料-windows定时重启计划
  5. java中long类型转换为int类型
  6. 【北京】线下活动 | Azure SQL Database Managed Instance发布会
  7. 【转】温故之.NET 异步
  8. 计算机组装虚拟实验,组装计算机的虚拟实验室
  9. 从浏览器中下载文件如何修改默认保存位置
  10. 2020 开春程序员面试必备!拿走不谢!
  11. python生成器函数的使用(模拟cycle函数)
  12. 20190925 On Java8 第二十二章 枚举
  13. 程序猿最喜欢哪一个浏览器?
  14. 超级鹰 古诗文网验证码识别实例
  15. 武汉大学计算机学院成绩单,2018年武汉大学各学院总评成绩计算公式汇总
  16. 程序员也需要知道的经济学通识
  17. MATLAB中cumsum函数
  18. 阻容感基础06:电容器分类(2)-电解电容
  19. iOS平台epub阅读器推荐
  20. Win7,8的上帝模式文件夹 GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

热门文章

  1. J2SE、J2EE、J2ME
  2. 工程伦理(笔记)第二章
  3. FoodKG- A Semantics-Driven Knowledge Graph for Food Recommendation
  4. 大型互联网支付公司职位--朝阳
  5. 大数据——HDFS的常用命令
  6. tar gz bz xz 解压缩命令
  7. C语言求两个数的较大值
  8. vue可以多次导入吗_vue中同一个页面多次使用同一个组件的相互干扰问题
  9. C语言实现简单的四则运算计算器
  10. cypress 自动化测试