今天来讲javaweb的第五阶段学习。

Cookie和Session同样是web开发常用到的地方。

老规矩,首先先用一张思维导图来展现今天的博客内容。

ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载

另外:如果图看不清的话请右击---在新窗口中打开会清楚很多。

一、会话管理技术概述

    1 什么是会话?

         这里的会话指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。

        例如:我们去网吧上网,在吧台拿到用户名和密码,然后找机器登录,这时候机器就认识了我们,我们就可以开始上网,这就相当于我们开启了一次上网的会话,当我们点击结束下机(或者遇到关机重启),或者上网时间到了,这时候机器就不再认识我们,那么就叫会话结束。

    2 会话管理技术能做什么?

        共享同一个客户浏览器多个请求中数据,例如购物车。(简单权限过滤)

二、客户端会话管理技术(Cookie):

    1 什么是Cookie?

        它是客户端浏览器的缓存文件,

里面记录了客户浏览器访问网站的一些内容。

它也是Http协议请求和响应消息头的一部分。(回顾http协议)

    2 Cookie能做什么?

        能保存客户浏览器访问网站的相关内容(需要服务器开启Cookie)。从而在每次访问需要同一个内容时,先从本地缓存获取,使资源共享,并且提高效率。

        Cookie有大小,个数限制。每个网站最多只能存20个cookie,且大小不能超过4kb。(32bit 不能超过4096MB)同时,所有网站的cookie总数不超过300个。

    3 Cookie中的属性

        属性:

            name:必要属性,cookie的名称。

            value:必要属性,cookie的值(不能是中文)

            ---------------------------可选属性---------------------------------

            path:cookie的    路径(重要)

            domain:cookie的域名(重要),相当于访问的网站(localhost)

            maxAge:cookie的生存时间(相当于生命周期的活着)(比较重要),

                     当删除cookie时,设置该值为0。

                     当不设置该值时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0的,以秒为单位)。

            version:cookie的版本号。(不重要)

            comment:cookie的说明。(不重要)

    4 在web应用中如何设置和获取Cookie

        定义一个Cookie

            Cookie cookie = new Cookie(cookieName,cookieValue);

        HttpServletRequest 获取 Cookie

            Cookie[] cookies = request.getCookies();

            该方法返回的是一个数组。(为什么是数组呢,方便,可以直接拿到与该请求相关的所有cookie)

        HttpServletResponse 添加Cookie

            response.addCookie(cookie);

        添加一个cookie,其实就是添加一个响应消息头

                response.setHeader("Set-Cookie","name=value;path=;maxage=;domain=");

        (为什么没有set方法,原因是set就会把之前的覆盖,所以每次都是添加)。

        如何确定一个唯一的cookie:cookieName+cookiePath+cookieDomain

        定位一个cookie是由 cookie的名称和路径,主机(访问的资源)三部分组成

    5 掌握Cookie的案例:

        A:使用Cookie技术获取最后访问时间(清除Cookie,设置maxAge(0));

        B:Cookie的Path(必须搞明白,什么时候浏览器带给服务器,什么时候不带)

        C:记录用户登录时的登录名

        D:记录浏览顺序

三、服务端会话管理技术(HttpSession):

    1、什么是HttpSession

            它是一个服务端会话对象,存储用户的会话数据。

    2、获取session的两种方式

            方式一:request:getSession();

            执行过程如下:

        方式二:request.getSession(boolean b);

        

        常用的几个方法:

            void setAttribute(String key,Object value);

            Object getAttribute(String key);

            void removeAttribute(String key);

            String getId();

        

    HttpSession的invalidate方法:作用是使session立即失效。

    设置HttpSession的过期时间,Tomcat的默认过期时间是30分钟。

    3、HttpSession的生命周期

        出生——活着——死亡

        出生:调用getSession方法后会话开始

        活着:只要没有关闭会话(关闭浏览器)或者调用立即失效方法。或者服务器意外,                HttpSession一直存在

        死亡:调用立即失效方法invalidate,到了过期时间,关闭会话,服务器意外。

    4、域对象(三缺一了)

        HttpSession:也是一个域对象,它比application域范围小,比request域范围大

        

    5 、三个案例

        A 简单购物车实现

        B 防止表单重复提交

        C 完成用户登录,记录用户名和密码

    6、客户端禁用Cookie后会话数据的保持

        方式1:使用文字提示。163邮箱就是使用的这种方式。

        方式2:URL重写。

                解释:当禁用了cookie之后,客户端永远都不会带Cookie到服务器。

                解决:我们自己给他带上,把URL重新写。 拼上一个JSESSIONID

                =session的ID。使用的是response.encodeURL()

                原来:http://localhost:8080/servletdemo/ServletDemo1

                重写后:http://localhost:8080/servletdemo/ServletDemo1;JSESSIONID=123

                注意:要重写必须全都重写,忘了一个,session中的数据就全部丢失。

                     因为不带cookie了,所以每次都是创建一个新的session。

    7、HttpSession对象的状态

        a、什么是持久态

            把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。

            我们把HttpSession持久态也叫做钝化。(与钝化想反的,我们叫活化。)

        b、什么时候使用持久化

            第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行持久化。

            第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对HttpSession进行持久化

        d、注意:HttpSession的持久化由服务器来负责管理,我们不用关心。

                 只有实现了序列化接口的类才能被序列化,否则不行。

Javaweb学习笔记5—Cookie&Session的更多相关文章

  1. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

  2. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  3. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  4. openresty 学习笔记六:使用session库

    openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...

  5. (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交

    如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...

  6. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  7. 【JAVAWEB学习笔记】16_session&cookie

    会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个 ...

  8. Django学习笔记之Cookie、Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  9. Beego 学习笔记14:Session控制

    Session控制 1>     Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2>     Beego框架内置了 session 模块,目前 ...

随机推荐

  1. Redis使用基本套路

    Redis的数据,通常都是来自于数据库. 存入Redis当中,可以快速的查询.不用每次都关联查询,然后其他处理什么的. 通常可以把一些,不经常变的数据存储其中. 避免数据变动,而Redis缓存数据不变 ...

  2. html5--6-28 css盒模型4

    html5--6-28 css盒模型4 实例 学习要点 了解盒模型 元素内容.内边距.边框 和 外边距 了解盒模型的概念: CSS 盒模型规定了处理元素内容.内边距.边框 和 外边距 的方式. 最内部 ...

  3. SPFA 最短路 带负权边的---- 粗了解

    SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法大致流程是用一个队列来进行维护. 初始时将源加入队列 ...

  4. 并不对劲的bzoj5475:loj2983:p5206:[wc2019]数树

    题目大意 task0:有两棵\(n\)(n\leq10^5)个点的树\(T1,T2\),每个点的点权可以是一个在\([1,y]\)里的数,如果两个点既在\(T1\)中有直接连边,又在\(T2\)中有直 ...

  5. HDU6028:Forgiveness(TLE ing,占位)

    Problem Description Little Q is now checking whether string A matches B. Two strings are considered ...

  6. 使用GAC加速 解决CSP问题 Kakuro - Cross Sums

    Kakuro - Cross Sums 问题如下 一个简单的例子 可以看出限制条件是某行或某列的某几个空白格子求和等于某个值,且每一个限制中的格子所填的数必须为1-9且互异. 直接暴力搜索,空白格子太 ...

  7. ThreadPoolExecutor之二:jdk实现的线程池介绍

    一 简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.uti ...

  8. Java使用Jacob将Word、Excel、PPT转化成PDF

    使用Jacob将金山WPS转化成PDF,其中WPS文字使用KWPS.Aplication.Excel表格是KET.Application.演示文档是KWPP.Application,废话不多说,直接上 ...

  9. Oracle Function INSTR

    INSTR(string,subString,position,ocurrence)查找字符串位置 解释:      string:字符串      subString:要查找的子字符串      p ...

  10. POJ2105【进制转化】

    直接瞎写就可以水过.我记得STL有很多好的函数,哎.水过去补多校的题. //#include <bits/stdc++.h> #include<cstdio> #include ...