自学JavaWeb_Session&Cookie

Session&Cookie

一、会话技术

什么是会话技术?(相当于打电话)

在计算机语言(领域), 是存在会话的, 客户端与服务器端之间的一次通话, 就称为会话;

当打开浏览器的那一刻, 并访问了一个地址(发送请求), 就开了一次新的会话, 会话期间可以对网站的站点发送多次请求(访问), 这样实际都是在一次会话中操作,浏览器关闭时, 代表会话结束;

会话就是客户端与服务器端一次不间断的请求和响应;

 

会话技术的分类:

  1. 客户端的会话技术: Cookie
  2. 服务器端的会话技术: session

(一)Cookie

1、Cookie简介

Cookie: 直译: 曲奇饼, 小饼干;

 

 

 

Cookie: 是浏览器和服务器之间传递数据的一张小纸条(文件); 也是保存在浏览器端一种特殊缓存技术;

服务器负责:

  1. 负责写小纸条, 发送给浏览器端
  2. 服务端接收小纸条并解析小纸条中的数据

浏览器负责:

  1. 负责保存小纸条
  2. 并将小纸条再次发送给服务器

 

 

 

应用场景:

  1. 七天记住密码
  2. 判断用户是否登录过此网站
  3. 用来记录购物车用户使用偏好来定制推送

2、查看Cookie

查询cookie信息:

 

 

 

 

 

 

 

 

 

 

 

 

 

Cookie删除:

 

 

 

或者:

快捷键: Ctrl + shift + delete 来删除所有cookie:

 

 

 

3、Cookie的使用

cookie入门案例

案例1:服务器给浏览器写cookie

 

 

 

以响应头的形式发送的

 

 

 

Cookie存储的位置:

 

 

 

 

l 案例2:浏览器把cookie传递给服务器,服务器解析

方法名

描述

getName()

获得cookie名称。

getValue()

获得cookie的值。

 

 

 

 

 

 

 

cookie种类:

种类:

  1. 会话级别的cookie: 会随着浏览器的关闭, cookie销毁
  2. 持久化级别cookie: cookie保存到浏览器端指定的位置后, cookie设置一个生存时间;

方法名

描述

setMaxAge(int expiry)

设置cookie的生存时间。  单位:秒。

Int的取值范围:

-1: 默认是会话级别的cookie

0: cookie立即销毁

1: 持久化的cookie, 存活时间是1秒   七天自动登录:60*60*24*7

l 如果没有设置,cookie只缓存浏览器缓存中,浏览器关闭,cookie删除。

l 如果设置有效时间,在时间范围内,cookie被写入到浏览器端,关闭浏览器下次访问仍可获得,直到过期。

 

 

 

 

 

 

 

案例:

以学生信息管理系统中的登录功能为例,用户登录成功后,将用户信息(账号和密码)保存到Cookie中,再次登录时从Cookie中直接获取账号和密码,自动加载到文本框中,避免手动输入。

说明:当第一次访问登录页面login.jsp时,账号和密码文本框是空的。

 

 

 

当使用正确的账号和密码登录成功后,关闭浏览器,再次打开登录页面login.jsp时,会自动加载账号和密码到对应的文本框,可以直接单击登录按钮进行登录。

 

 

 

 

 

 

 

 

 

总结cookie的特点:

  1. Cookie只能保存键值对的形式(字符串)
  2. Cookie的数据量大小有限制, 不能超过4kb;
  3. Cookie是保存在客户端的, 与服务器端无关
  4. Cookie默认有效期是会话级别的cookie, 会随浏览器的关闭, cookie销毁;, 如果想要持久化cookie, 就要设置cookie的生存时间;

(二)Session

1、Session简介

Session是服务器提供的一个会话对象,是第二大作用域对象。创建之后这个Session存储到服务器中的。但Session的使用需要和浏览器建立关联,这个关联Cookie有关,其中每一个Session对象都会对应一个sessionId,这个sessionId就被存储在Cookie

Session会话跟踪技术原理:(面试题)

 

 

 

1、第一次发送请求时服务器会创建session对应一个JSESSIONID,每次客户端请求的时候都会携带JESSIONID进行服务器访问,如果这个JSESSIONID不存在,到达服务器之后会创建一个新的SESSION并将ID保存至客户端如果存在直接使用这个SESSION

2、请求的时候如果发现当前JESSIONID在服务器找不到,就会重新创建新的SESSION

3、如果关闭了浏览器,即周期会话结束,客户端存JESSIONID这个Cookie就会消失(这是利用了Cookie的特性,默认有效期是浏览器关闭),再次访问的时候需要服务器重新创建SESSION,旧的SESSION在服务器端并未销毁,而是由于存储在客户端的JESSIONID丢失,从而无法引用,这样的SESSION会被GC回收。

2、Session的使用

入门案例:

案例1: 获取session对象

 

 

 

 

案例2: 使用session进行数据共享(作用域对象)

 

 

 

 

 

 

Session的生命周期:

创建: HttpSession session = request.getSession();

销毁:

  1. 服务器非正常关闭时, session销毁
  2. 手动调用session.invalidate();

 

 

 

  1. Session默认30分钟内有效, 30分钟在哪设置?(tomcatweb.xml配置文件)

 

 

 

 

案例1

当用户登录成功进入网站首页后,在首页显示欢迎XXX登录。

分析实现思路:

1)在用户登录成功时将用户信息保存到Session

session.setAttribute("username", username);

2)在用户首页从Session中获取用户信息并显示

<h2>欢迎${username }登录!</h2>

 

 

 

 

 

 

 

案例2

使用Session完成登录控制。网站首页在未登录情况下不允许访问。

分析实现思路:

1)在用户登录成功时将用户信息保存到Session

session.setAttribute("username", username);

2)在首页对Session数据进行判断,如果存在用户信息表明已登录,可以访问该页面,否则强制跳转到登录页,先登录再访问。

 

 

 

总结session特点:

  1. 存在服务器端
  2. 默认生存时间30分钟
  3. Session是第二大作用域对象
  4. Session中可以存存储任意类型数据

3、SessionCookie的区别和关联

区别:

  1. 存储位置不同: cookie存储在客户端, session存储在服务器端
  2. 存储数据量大小不同: cookie存储数据有限, 不能超4KB, session没有上限
  3. 存储的数据类型不同: cookie只能存储字符串类型, session可以存储任意类型
  4. 默认有效期不同: cookie默认是会话级别cookie, 会随着浏览器的关闭, cookie销毁, session默认30分钟;

关联:

Cookiesession都是服务于浏览器的, session需要借助于cookie才能实现会话, cookie中默认存储这JSESSIONID的值, 根据这个JSESSIONID区匹配对应的session, 关闭浏览器JSESSIONID就是消失, 而不是销毁, 还是依然存在的, 只是找不到.最终会被GC收回;

二、项目改造

(一)日期类型回顾

MySQL中的日期类型:

date:yyyy-MM-dd

time:hh : mm :ss

datetime:yyyy-MM-dd hh:mm:ss

 

java中的日期类型:

java.util.Date   Wed Feb 05 16:34:14 CST 2020

java.sql.Date   2019-12-30

util工具包中的日期类型显示的信息全,而sql包中的日期类型只显示年月日,因此我们在开发过程中多使用util包中的Date类型。

在实际开发中,往往会涉及到日期类型与字符串类型之间的相互转换,我们可以借助于SimpleDateFormat类进行相互转换,为了使用的方便,我们可以专门定义一个日期转换的工具类。

 

 

 

为了后期的方便使用 可以封装成一个工具类(时间工具类)

 

 

 

(二)学生项目改造

需求:在学生表中添加一列出生日期

 

 

 

最终实现:

 

 

 

虽然以上日期也能够实现, 但是让用户手动输入日期就不太友好, 并且手动输入格式各种各样;

优化: 借助一款日历控件;

(三)日历控件的使用

下载日历控件http://www.my97.net 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(四)JSTL时间格式化

 

 

 

优化:将后边的零去掉(就要进行时间的格式化)

需要用到了jstl标签库的格式化库

  1. 引入格式化标签库

 

 

 

  1. 对日期进行格式化

 

 

 

 

 

 

(五)模糊查询

需求:根据学员姓名进行模糊查询,如果文本框中有值则按关键字模糊查询,否则查询全部。

 

 

 

Sql语句:只能模糊查询

 

 

posted @ 2020-09-24 17:13  master_hxh  阅读(125)  评论(0编辑  收藏  举报