首页 > 编程语言 >Day20_学点儿JavaEE_Cookie、Session

Day20_学点儿JavaEE_Cookie、Session

时间:2024-04-10 23:59:56浏览次数:27  
标签:浏览器 Session request JavaEE session Cookie cookie

0 会话技术简介

生活中会话

我: 小张,你会跳小苹果码?
小张: 会,怎么了?
我: 公司年会上要表演节目,你教教我把
小张:没问题,一顿饭而已。
我: OK。
。。。。。。。。
在这次生活中的会话中产生通话记录(会话数据)

软件中的会话

链接到数据库Connection,也叫会话,你要想操作数据库要和数据库保持一个会话的功能。

会话

一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
会话技术就是记录这次会话中客户端的状态与数据的。

会话技术分为CookieSession
Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清除cookie
Session:将数据存储到服务器端,安全性相对好,增加服务器的压力

在这里插入图片描述
ServletContext域对象的作用范围:整个web应用(所有的web资源servlet、jsp都可以向ServletContext域中存取数据,数据是可以共享的)
数据放在服务器的技术叫Session技术:Session技术要用到Cookie
在这里插入图片描述
四个域对象:
Request、ServletContext、Session、Page 都可以通过setAttribute(“key”, value) getAttribute(“key”)存取数据

什么是域对象?

Request、Session、ServletContext这三个都是域对象,域对象就是存储数据的区域(其实就是服务器中一块内存区域)
所有的域对象都有这三个方法:

  1. request.setAttribute("list", list);
  2. request.getAttribute("list");
  3. request.removeAttribute("list");

RequestSessionServletContext这三个都是域对象区别就是他们的范围不一样。

  1. request.setAttribute("list", list); requst的范围只在转发中有效。
  2. session.setAttribute("list", list); session的范围是当前这个用户的所有操作都有效。
  3. servletContext.setAttribute("list", list); servletContext的范围整个项目都有效。

范围:ServletContext>Session>Request>Page
使用原则:小的范围能完成功能就放到小的里面。

1 Cookie

数据放在浏览器端的技术叫Cookie技术:
在这里插入图片描述
像亚马逊这种电商网站,用户没有登录时候,购物车信息是存放在Cookie中,如果用户登录了,会把Cookie中购物车信息 同步到服务器的数据库中,是不会放到Session中,因为像ServletContext和Session都是服务器中的一块内存区域是非常宝贵,重启服务器所有的内存区域都会销毁,数据也就没有了。
大家都有这种体验:登录之后加入在电脑浏览器加入购物车信息,在手机上也能访问,手机上是从服务器的数据库中拿到的。
在这里插入图片描述

1.1 服务器怎么将Cookie设置到浏览器客户端

创建Cookie
Cookie cookie = new Cookie(cookieName, cookieValue);
例子:
Cookie cookie = new Cookie("goods", "IPhone");
resp.addCookie(cookie);
Cookie会以响应头的形式发送给浏览器客户端。
Cookie中不能存中文。
在这里插入图片描述
在这里插入图片描述
再请求Servlet的时候会自动携带设置的Cookie:
在这里插入图片描述

1.2 服务器怎么接受客户端携带的Cookie

cookie信息是以请求头的方式发送到服务器端的:
1)通过request获得所有的Cookie:
Cookie[] cookies = request.getCookies();
2)遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie

protected void  service(HttpServletRequest req,  HttpServletResponse resp) {
       Cookie[] cookies =  req.getCookies();
       for (Cookie cookie : cookies)  {
             System.out.println("name:  " + cookie.getName() + ", value:  " + cookie.getValue());
       }
}

1.3 Cookie在浏览器中保存多长时间?

  1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
  2. 持久化存储:
    cookie.setMaxAge(10 * 60);//保存10分钟
    设置Cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该Cookie信息。
    an integer specifying the maximum age of the cookie in seconds; if negative, means the cookie is not stored; if zero, deletes the cookie
    正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
    负数:浏览器关闭的时候Cookie就丢失,默认值
    :表示删除同名的Cookie数据。
  3. 删除客户端的Cookie:
    如果想删除客户端已经存储的Cookie信息,就是将持久化时间设置为0

2 Session

Session服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中——HttpSession
但客户端需要每次携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间。
所以说Session技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。

2.1 获得Session对象

两中getSession方法:
HttpSession session = request.getSession(false);
HttpSession session = request.getSession(true); request.getSession();

  1. request.getSession(false)
    得到session对象,原来有Session就直接返回,没有返回null
  2. request.getSession(true)
    创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象。
    request.getSession(); 不加参数默认就是true

2.2 怎样向session中存取数据

Session也是存储数据的区域对象(域对象),所以session对象也具有如下三个方法:

  1. session.setAttribute(String name,Object obj);
  2. session.getAttribute(String name);
  3. session.removeAttribute(String name);

2.3 Session对象的生命周期

创建: 第一次执行request.getSession()时创建
销毁:

  1. 服务器关闭时
  2. session过期/失效(默认30分钟)
    问题: 时间的起算点 从何时开始计算30分钟?
    答: 从不操作服务器端的资源开始计时

可以在工程的web.xml中进行配置

<session-config>
        <session-timeout>30</session-timeout>
</session-config>
  1. 手动销毁session (注销或者退出)
    session.invalidate();

当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session.

2.4 Session与Cookie的区别

  1. Session存储数据在服务器端,Cookie在客户端
  2. Session没有数据大小限制,Cookie有
  3. Session数据安全,Cookie相对于不安全

代码

Day20_复制粘贴快速开发(课程表)、CookieDemo、Filter登录过滤及放行、教师薪资显示0.0

标签:浏览器,Session,request,JavaEE,session,Cookie,cookie
From: https://blog.csdn.net/Mr_Tang4/article/details/137609808

相关文章

  • session与cookie的区别?
    1、cookie数据存放在第三方应用的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE,进行COOKIE欺骗,考虑到安全应当使用session。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当......
  • 在python爬虫中如何处理cookie和session
    使用python开发爬虫的过程中,遇到需要登录鉴权的一些页面,必不可少的会接触到cookie和session的使用。本文结合自己最近一次爬虫爬坑的经历,介绍在python爬虫中如何使用Cookie和SessionCookie和Session的介绍CookieCookie是一种用于跟踪用户会话信息的小型文本文件。它由......
  • Django框架之Cookie和Session
    一、cookie与session的发展史Cookie和Session是Web开发中常用的两种机制,用于在客户端和服务器之间存储和管理用户信息。1、Cookie的发展史:1994年:由Netscape公司的工程师LouMontulli发明。最初的目的是为了解决HTTP协议的状态管理问题,使网站能够在浏览器端存储和读取用户信息......
  • JavaEE初阶Day 5:多线程(3)
    目录Day5:多线程(3)1.join2.再谈sleep3.线程的状态4.线程安全问题Day5:多线程(3)多线程在整个编程中都是非常核心非常重要的话题多核CPU客观的主流的需求多线程这里还是有一定难度/不少注意事项的回顾Thread创建的写法继承Thread,重写run实现Runnable,重写run......
  • 【21.1】Django框架之会话Session补充
    【一】前言引入【1】HTTP特性之无状态因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的、独立的。通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。对于静态网站,这可能不是个问题,而对于动态网站,尤其......
  • 【21.0】Django框架之Cookie和Session
    【一】Cookie与Session的发展史Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只......
  • The remote session was disconnected because there are no Remote Desktop License
    远程桌面登录报错,信息如下:TheremotesessionwasdisconnectedbecausetherearenoRemoteDesktopLicenseServersavailabletoprovidealicense.therearenoRDConnectionBrokerserversintheserverpool.Tomanageadeployment,youmustaddalltheserv......
  • 面试常见问题——http/https的区别,cookie和session的区别
    http:1、简单快速2、传输类型灵活3、无连接4、无状态一般http中存在如下问题:请求信息明文传输,容易被窃听截取。数据的完整性未校验,容易被篡改没有验证对方身份,存在冒充危险 https:首先客户端通过URL访问服务器建立SSL连接。服务端收到客户端请求后,会将网站支持的证......
  • Java毕业设计-基于springboot开发的javaEE校园二手书交易平台设计与实现-毕业论文(附毕
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构三、系统实现展示1、用户信息管理2、图书类型管理3、图书信息管理4、公告信息管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的javaEE校园二手......
  • 鉴权、授权:token和session
    1、session服务器认证、授权、鉴权:cookie+session来做认证cookie是放在游览器中的session是保存在服务器的数据库中的session鉴权处理:self.session=request.session() 直接拿self.session发送请求就好了,无需收到添加cookie  2、token安全令牌机制token是服务器生成......