zoukankan      html  css  js  c++  java
  • 自学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语句:只能模糊查询

     

  • 相关阅读:
    装饰者模式
    NGUI研究院之三种方式监听NGUI的事件方法(七)
    unity3d连接数据库
    unity3d 连接MSSql
    Unity3D之游戏架构脚本该如何来写
    WCF 部署问题 小总结 (HTTP 不能注册的解决方法)
    Prototype
    web.config文件之自定义错误节
    asp:DropDownList与asp:DataList的联合使用
    剑指offer --合并链表
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13725133.html
Copyright © 2011-2022 走看看