zoukankan      html  css  js  c++  java
  • Javaweb学习笔记5—Cookie&Session

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

    CookieSession同样是web开发常用到的地方。

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

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

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

    一、会话管理技术概述

        1 什么是会话?

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

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

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

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

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

        1 什么是Cookie

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

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

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

        2 Cookie能做什么?

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

            Cookie有大小,个数限制。每个网站最多只能存20cookie,且大小不能超过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就会把之前的覆盖,所以每次都是添加)。

            如何确定一个唯一的cookiecookieName+cookiePath+cookieDomain

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

        5 掌握Cookie的案例:

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

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

            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分钟。

        3HttpSession的生命周期

            出生——活着——死亡

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

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

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

        4、域对象(三缺一了)

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

            

        5 、三个案例

            A 简单购物车实现

            B 防止表单重复提交

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

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

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

            方式2URL重写。

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

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

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

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

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

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

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

        7HttpSession对象的状态

            a、什么是持久态

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

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

            b、什么时候使用持久化

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

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

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

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

  • 相关阅读:
    三元表达式 列表和字典推导式 函数对象 名称空间 作用域 global和nonlocal 函数装饰器 枚举对象
    函数参数 打散机制 字符串比较 返回值
    函数简介
    三种字符串的介绍 文件的读写
    字符编码
    数据类型及其常用方法 数据类型转换 可变与不可变 值拷贝与深浅拷贝
    流程控制 while和for循环
    变量命名规范 常量 输入和输出 注释 数据类型 运算符 逻辑运算符
    语言分类 编译型和解释型语言分析 环境变量 代码执行的方式 pip介绍 变量
    Python django tests
  • 原文地址:https://www.cnblogs.com/jinfulin/p/4361023.html
Copyright © 2011-2022 走看看