Java复习第十九天学习笔记(Cookie、Session登录),附有道云笔记链接

【有道云笔记】十九 4.7 Cookie、Session登录

https://note.youdao.com/s/VwpxfEim

一、会话技术简介

生活中会话

我: 小张,你会跳小苹果码?

小张: 会,怎么了?

我: 公司年会上要表演节目,你教教我把

小张:没问题,一顿饭而已。

我: OK。

。。。。。。。。

在这次生活中的会话中产生通话记录(会话数据)

软件中的会话

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

会话:

一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

会话技术就是记录这次会话中客户端的状态与数据的。

会话技术分为Cookie和Session:

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");

Request、Session、ServletContext这三个都是域对象区别就是他么的范围不一样。

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

范围:ServletContext>Session>Request>Page

使用原则:小的范围能完成功能就放到小的里面。

一、Cookie

数据放在浏览器端的技术叫Cookie技术:

像亚马逊这种电商网站,用户没有登录时候,购物车信息是存放在Cookie中,如果用户登录了,会把Cookie中购物车信息 同步到服务器的数据库中,是不会放到Session中,因为像ServletContext和Session都是服务器中的一块内存区域是非常宝贵,重启服务器所有的内存区域都会销毁,数据也就没有。

大家都有这种体验登录之后加入在电脑浏览器加入购物车信息,在手机上也能访问,手机上是从服务器的数据库中拿到的。

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

创建Cookie

Cookie cookie = new Cookie(cookieName, cookieValue);

例子:

Cookie cookie = new Cookie("goods", "IPhone");

resp.addCookie(cookie);

Cookie会以响应头的形式发送给浏览器客户端。

Cookie中不能存中文。

再请求Servlet的时候会自动携带设置的Cookie:

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()); } }

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数据。

删除客户端的Cookie:

如果想删除客户端已经存储的Cookie信息,就是将持久化时间设置为0


二、Session

Session服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

但客户端需要每次携带一个标识的ID:JSESSIONID去服务器寻找自己的内存空间。

所以说Session技术是基于Cookie技术的,Session需要借助于Cookie存储客户的唯一标识JSESSIONID。

1、获得Session对象

两中getSession方法:

HttpSession session = request.getSession(false);

HttpSession session = request.getSession(true); request.getSession();

  1. request.getSession(false)

得到session对象,原来有Session就直接返回,没有返回null

  1. request.getSession(true)

创建或得到session对象,原来有Session就直接返回,没有Session自动创建新的session对象。

request.getSession(); 不加参数默认就是true。

2、怎样向session中存取数据

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

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

3、Session对象的生命周期

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

销毁:

  1. 服务器关闭时
  2. session过期/失效(默认30分钟)

问题:时间的起算点 从何时开始计算30分钟?

从不操作服务器端的资源开始计时

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

30

  1. 手动销毁session (注销或者退出)

session.invalidate();

当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;

当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;

当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session.

4、Session与Cookie的区别

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

三、登录

使用Session技术完成用户登录的功能:

登录功能会使用到Session,把用户登录的用户名和密码保存到Session,因为Session是属于每个用户独有的,就可以记录每个用户单独的登录信息。

相关推荐
weixin_462428474 分钟前
使用 Caffeine 缓存并在业务方法上通过注解实现每3到5秒更新缓存
java·缓存
程序媛小果6 分钟前
基于java+SpringBoot+Vue的桂林旅游景点导游平台设计与实现
java·vue.js·spring boot
骑鱼过海的猫1237 分钟前
【java】java通过s3访问ceph报错
java·ceph·iphone
杨充13 分钟前
13.观察者模式设计思想
java·redis·观察者模式
Lizhihao_16 分钟前
JAVA-队列
java·开发语言
HC1825808583219 分钟前
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
学习·生活
学习路上_write24 分钟前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
喵叔哟25 分钟前
重构代码之移动字段
java·数据库·重构
喵叔哟25 分钟前
重构代码之取消临时字段
java·前端·重构
fa_lsyk28 分钟前
maven环境搭建
java·maven