目录

前言

第九章 玩转会话跟踪技术Cookie 和 session

第1集 会话跟踪技术之什么是Cookie

第2集 javaweb开发核心之Cookie实战

第3集 Web开发必备知识之Session会话你知道多少

第4集 javaweb会话技术HttpSession用户登录实战


前言

小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。 随着互联网+的时代,在线教育技术越来越便捷,小滴课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。更多教程请访问xdclass.net(添加VX:xdclass99)

第九章 玩转会话跟踪技术Cookie 和 session

第1集 会话跟踪技术之什么是Cookie

简介:介绍web开发核心技术之Cookie介绍和使用

  • cookie介绍

    • 背景:HTTP协议作是无状态协议,无状态指每次request请求之前是相互独立的,当前请求并不会记录它的上一次请求信息。 存在这样的问题,既然无状态,那完成一套完整的业务逻辑,需要发送多次请求,那么怎么标识这些请求都是同个浏览器操作呢?
    • 解决方案:

      • 浏览器发送request请求到服务器,服务器除了返回请求的response之外,还给请求分配一个唯一标识ID和response一并返回给浏览器

      • 服务器在本地创建一个map结构,专门以key-value存储这个ID标识和浏览器的关系

      • 当浏览器的第一次请求后已经分配一个ID,当第二次访问时会自动带上这个标识ID,服务会获取这个标识ID去map里面找上一次request的信息状态且做对应的更新操作 服务端生成这个全局的唯一标识,传递给客户端用于标记这次请求就是cookie; 服务器创建的那个map结构就是session。

      • cookies由服务端生成,用于标记客户端的唯一标识,在每次网络请求中,都会被传送。

      • session服务端自己维护的一个map数据结构,记录key-Object上下文内容状态

      • 核心:它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 浏览器查看多个站点的cookie

  • cookie的属性

    • Name : 名称

    • Value : 值

    • Domain:表示当前cookie所属于哪个域或子域下面

    • Expires/Max-age:表示了cookie的有效期,是一个时间,过了这个时间,该cookie就失效了

    • Path:表示cookie的所属路径。

    • size: 大小,多数浏览器都是4000多个字节

    • http-only: 表示这个cookie不能被客户端使用js读取到,是不公开的cookie

      • (chrome调试器的console中输入document.cookie将得不到标记为HttpOnly的字段)
    • Secure: 标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端,

      • 从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用Cookie的 Secure 标记
    • SameSite(特有的,可以忽略)

  • Cookie的缺陷

    • cookie会被附加在每个HTTP请求中,增加了流量。
    • 在HTTP请求中的cookie是明文传递的,所以安全性成问题,除非用HTTPS
    • Cookie的大小有限制,对于复杂的存储需求来说不满足
    • 如果cookie泄露,你猜猜会发生什么问题?
  • 浏览器允许每个域名所包含的cookie数量?

  • 多数浏览器允许最多是50个,部分浏览器是30或者20;
  • 满后会有多种剔除策略,比如LRU,权重等
  • Cookie的现状:
  • Cookie曾一度用于客户端数据的存储,因当时并没有其它合适的存储办法而作为唯一的存储手段
  • 现代浏览器开始支持各种各样的存储方式,Cookie渐渐被少用了,新的浏览器API已经允许开发者直接将数据存储到本地,比如localStorage、SessionStorage等 参考:HTTP Cookie - HTTP | MDN

第2集 javaweb开发核心之Cookie实战

简介:javaweb操作浏览器cookie

  • 获取请求的cookie
 Cookie[] cookies = request.getCookies();for(Cookie cookie : cookies){cookie.getDomain();}
​private final String name;private String value;
​private int version = 0; // ;Version=1 ... means RFC 2109 style//// Attributes encoded in the header's cookie fields.//private String comment; // ;Comment=VALUE ... describes cookie's useprivate String domain; // ;Domain=VALUE ... domain that sees cookieprivate int maxAge = -1; // ;Max-Age=VALUE ... cookies auto-expireprivate String path; // ;Path=VALUE ... URLs that see the cookieprivate boolean secure; // ;Secure ... e.g. use SSLprivate boolean httpOnly; // Not in cookie specs, but supported by browsers
  • 响应返回cookie

    Cookie cookie = new Cookie("token","sfwerawefewadaewfafewafa");
    //20秒过期时间,过期后不会自动携带过去
    cookie.setMaxAge(20);
    response.addCookie(cookie);
    request.getRequestDispatcher("/index.jsp").forward(request,response);
  • js获取cookie,可以获取token,但是获取不到JSESSIONID,因为 http-only原因

第3集 Web开发必备知识之Session会话你知道多少

简介:web开发Session知识

  • 什么是Session

    • 背景:HTTP协议作是无状态协议,无状态指每次request请求之前是相互独立的,当前请求并不会记录它的上一次请求信息。
    • 存在这样的问题,既然无状态,那完成一套完整的业务逻辑,需要发送多次请求,那么怎么标识这些请求都是同个浏览器操作呢?
    • cookie和session都是为了弥补http协议的无状态特性,对server端来说无法知道两次http请求是否来自同一个用户,利用cookie和session就可以让server端知道多次http请求是否来自同一用户
  • 生成和使用流程(和Cookie知识点一样,两者互相配合)

    • 浏览器第一次发送request请求到服务器,服务器除了返回请求的response之外,还给请求分配一个唯一标识sessionId和response一并返回给浏览器
    • 服务器在本地创建一个map结构,专门以key-value存储这个sessionId和浏览器的关系
    • 当浏览器的第一次请求后已经分配一个sessionId,当第二次访问时会自动带上这个标识sessionId
    • 服务器通过查找这个sessionId就知道用户状态了,并更新sessionId的最后访问时间。
    • 注意: Session是有时限性的:比如如果30分钟内某个session都没有被更新,服务器就会删除这个它。
  • 总结:

    • 服务端生成这个全局的唯一标识,传递给客户端用于标记这次请求就是cookie;
    • 服务器创建的那个map结构就是session。
    • cookies由服务端生成,用于标记客户端的唯一标识,在每次网络请求中,都会被传送。
    • session服务端自己维护的一个map数据结构,记录key-Object上下文内容状态
    • 总言之cookie是保存在客户端,session是存在服务器,session依赖于cookie
    • cookie里面存储的就是JSESSIONID
  • 使用场景:记录用户的登录状态、权限等

  • session的现状

    • session是存储在服务端的内存中,在javaweb里面叫HttpSession也是一个作用域

    • PageContext(页面)->ServletRequest(请求)->【HttpSession】(会话)->ServletContext(一个应用)

    • 是可以存储很多key-value的,作用域比较广,所以也不能存储过多内容,因为内存是有限制的,互联网企业使用比较少,传统IT公司使用比较多

  • 知识延伸:

    • 服务端是单机情况下session是可以很用的使用的,但是分布式(多台机器)情况下就存在不能共享的问题。
    • 用户A在当前机器登录,突然某次请求到B机器,由于B服务器不存在这个用户的登录信息,所以就会提示重新登录
    • 这个场景下就用到分布式存储方案-比如Redis(跟着学习路线,后续的专题路线课程会讲)

第4集 javaweb会话技术HttpSession用户登录实战

简介:讲解HttpSession知识开发用户登录实战

  • HttpSession 类操作api介绍:

    HttpSession session = request.getSession();
    ​
    //获取sessionid,java里面叫jsessionid
    System.out.println("sessionid="+session.getId());//创建时间戳,毫秒System.out.println("getCreationTime="+session.getCreationTime());//是否是初次创建,记得情况浏览器的cookie,验证sessionid
    System.out.println("isNew="+session.isNew());
    ​
    //往session存储东西
    session.setAttribute("name","小滴课堂 xdclass.net");
  • 登录Servlet实战
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("name");String pwd = req.getParameter("pwd");if(name.equals("xdclass") && pwd.equals("123")){User user = new User();user.setId(121);user.setName(name);user.setHost("xdclass.net");req.getSession().setAttribute("loginUser",user);req.getRequestDispatcher("/WEB-INF/user.jsp").forward(req,resp);}else{req.setAttribute("msg","账号密码错误");req.getRequestDispatcher("/login.jsp").forward(req,resp);}
​
​}
  • 登录Jsp
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/loginServlet" method="post">名称:<input type="text" name="name"/><br/>密码:<input type="password" name="pwd"/><input type="submit" value="登录">消息提示 ${msg}
</form>
</body>
</html>
  • 登录成功页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
id:${loginUser.id}
<br>
name:${loginUser.name}
<a href="/logout_servlet">退出</a>
</body>
</html>
  • 退出登录实现方式: session.invalidate();
  • 过期时间配置web.xml,单位分钟
<session-config><session-timeout>30</session-timeout>
</session-config>

小滴课堂-新版JavaWeb零基础到实战专题课程-9相关推荐

  1. 小滴课堂工业级paas云平台+springcloudAlibaba+JDK11综合项目实战

    二当家小D 讲师: xdclass6 1024电商平台系统实战架构设计和实现需求分析 第1集 1024电商平台业务背景介绍和简历项目编写建议 简介:讲解电商营销中心的业务背景和简历项目编写建议 大课业 ...

  2. 海量数据大课学习笔记(6)-短链平台项目创建+git代码管理+开发分层规范讲解--小滴课堂

    文章目录 前言 第1集 短链平台实战-Maven聚合工程创建微服务项目 第2集 Gitee仓库介绍和项目纳入版本管理+ignore文件配置 第3集 阿里编码规范里面Manager分层介绍-和开发规范说 ...

  3. 海量数据大课学习笔记(2)-不在其位要谋其政,技术Leader能力模型提升-小滴课堂

    文章目录 前言 第1集 互联网大厂里 技术Leader的能力模型-不单写代码 第2集 技术人的产品运营能力提升-竞品分析 第3集 跳出自己的技术思维模型-上司给你团队安排任务 前言 小滴课堂,旨在让编 ...

  4. 海量数据大课学习笔记(8)-账号微服务注册模块+短信验证码+阿里云OSS开发实战-小滴课堂

    文章目录 前言 第1集 账号微服务注册功能和流程介绍 第2集 第三方短信验证码平台接入申请操作指引 第3集 账号微服务短信验证码发送工具类封装实战 第4集 账号微服务短信验证码发送工具类单元测试 前言 ...

  5. Javaweb零基础学习(壹)

    Javaweb零基础学习(壹) 前言 Web本质是什么 下载相关软件 常用文本标签 前言 这里讲一下我自己是如何自习的Javaweb前端,由于集训的时候讲了一下基础知识,所以我这里自学是以项目为主,边 ...

  6. 阿里云【名师课堂】Java零基础入门24 ~ 26:方法的定义与使用

    阿里云[名师课堂]Java零基础入门24 ~ 26:方法的定义与使用 24:方法的基本定义 无返回值无参数 无返回值有参数 有返回值有参数 25:方法重载(重点) 26:方法递归调用 24:方法的基本 ...

  7. 知了课堂 Python Flask零基础 笔记整理

    目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...

  8. 阿里云【名师课堂】Java零基础入门6:CLASSPATH环境属性

    阿里云[名师课堂]Java零基础入门6:CLASSPATH环境属性 一.具体内容 二.总结 一.具体内容 CLASSPATH指的是类的加载路径,是一个路径列表,用于搜索Java编译或者运行时所用到的类 ...

  9. 海量数据大课学习笔记(12)-账号微服务-阿里云OSS接入实战-小滴课堂

    文章目录 前言 第1集 分布式文件存储业界常见解决方案介绍 第2集 阿里云OSS分布式对象存储介绍开通 第3集 权限知识 RBAC-ACL模式应用之阿里云RAM访问控制 第4集 阿里云OSS客户端SD ...

最新文章

  1. 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)_3D视觉工坊的博客-CSDN博客
  2. 安装和使用花生壳(linux)
  3. 云原生应用如何做到低成本获得高稳定?
  4. c语言输出参数是out,关于C语言中的输出输入流
  5. 怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
  6. IDA Plugin 编写基础
  7. PyCairo 中的文本
  8. Hollis要转行了?
  9. Mongodb密码安全设置
  10. android sax解析xml
  11. 访问网址(使用CDN)时 智能DNS调度 与 用户定位调度(根据IP定位)
  12. 电脑内录录音软件,可选择录音来源
  13. 太极软件qn的代码_多版本QQ内置qn、qx模块
  14. ADC驱动器/差分放大器设计指南
  15. 关于test eax eax
  16. C++程序运算时间计算
  17. passive-interface OSPF 的被动接口
  18. android 微信签名,Android微信签名知识的总结
  19. 第十章 PL/SQL对象类型
  20. 计算机使用的显示器有哪些重要参数,电脑显示器知识:显示器参数主要看什么?(2)...

热门文章

  1. PDF中图片表格可以转成Excel表格吗?
  2. 上传图片前限制图片比例大小格式
  3. Tesseract3.02训练生成新的识别语言库的详细步骤
  4. 集成墙板使用寿命多久?影响因素有哪些?
  5. 在家挣钱的十种方法,看看你适合哪个?
  6. ICLR 2017精选论文
  7. ubuntu12.04安装极点五笔
  8. java如何解析带时区的日期,java – Joda时间解析一个带时区的日期,并保留该时区...
  9. 【DB宝48】JumpServer:多云环境下更好用的堡垒机
  10. skywalking实现分布式系统链路追踪