1. Cookie:实际上就是一个头。
                   服务器会创建Cookie,并且将Cookie以一个响应头的形式发送给浏览器
                   浏览器收到Cookie以后,会保存Cookie,并且每次访问服务器时都会以请求头的形式带着Cookie
                   服务器就可以根据浏览器带着的Cookie来识别不同的用户

2.  Cookie的不足:
                            Cookie是纯文本的,使用起来不安全。
                            浏览器每次访问服务器都需要带着Cookie,无形中增加浏览器的流量。
                            浏览器对Cookie的数量和大小都有不同的限制,所以我们不能再Cookie中保存大量的信息。

3.  Cookie的信息最终都是要保存到浏览器上的,但是浏览器对Cookie的大小和数量都有限制,不能在Cookie中保存大量信息,但是在服务器中保存的内容的大小和 数量是没有限制的,所以可以将用户的信息保存到服务器上的一个对象中,并生成一个唯一的标识,然后将这个唯一的标识交给浏览器保存(以Cookie的形式),然后服务器中就可以根据这个标识找到他的对象, 服务器中的对象就是我们熟悉的HttpSession。

4.  HttpSession用来保存当前浏览器的会话的信息,每一次会话都对应一个session对象。
                            一个浏览器对应一个Session对象,不同浏览器之间不会共享Session
                            Session的默认有效时间是一次会话,一旦关闭浏览器以后Session对象将失效
                            每一个Session都有一个唯一的ID,我们只需要将ID交给浏览器,就可以通过ID来找到浏览器对应的那个Session对象。
                            当服务器创建一个新的HttpSession对象时,会将session的id以Cookie的形式发送给浏览器:
                            当浏览器再次访问服务器是,会以Cookie的形式带着Session的ID,服务器会去检查ID,并根据ID获取到HttpSession对象
                            Session在服务器内部是保存到一个叫做SessionMap的集合中,这个map的key是Session的ID,值就是Session对象

5. HttpSession工作机制
                            Session对象的创建时机
                            Session对象是在request.getSession()方法第一次被调用时创建。
                            在第一次访问JSP时,也会创建一个Session对象,因为在JSP对应的java文件中,已经调用过该方法了。
        6. UUID及时间戳:
                            UUID:是一个32位的唯一标识符,UUID是根据机器码以及时间戳生成的,所以UUID是全世界的一个唯一的标识符,
                            永远不会重复,一般使用UUID做为一个对象的唯一标识,或者做为数据库表中的一个主键!
                            生成UUID的码过程:

在此类中写如下生成uuid的代码
                                 

运行结果如下:

7.  有效时间

Session对象的默认有效时间是一次会话,这里并不是因为Session对象被销毁了,而是浏览器保存的JSESSIONID的这个Cookie丢失了。

能不能让Session对象,如何使关闭浏览器以后依然有效?通过修改JSESSIONID这个Cookie有效时间,让Session在关闭浏览器之后依然有效。         -

Session对象是有一个最大的闲置时间,一旦超过最大的闲置时间,则Session对象会被销毁。

我们可以在总的web.xml文件中配置Session对象的最大闲置时间

它的单位是分钟,可以在这里来修改,但是如果在这修改那么服务器中所有项目的闲置时间都会修改。

如果我们只想修改我们当前项目的闲置时间,可以在当前项目的web.xml文件中进行修改

8.  通过setMaxInactiveInterval来设置有效时间

当传一个大于0的数时,session的最大闲置时间会被设置为相应的秒数

//session.setMaxInactiveInterval(10);

当传一个等于0或小于0的数时,session对象会永远有效,所以尽量不给他设置负值

//session.setMaxInactiveInterval(0);          session.setMaxInactiveInterval(-100);

使Session立即失效      session.invalidate();

9. 当浏览器禁用Cookie时解决方法
                             Session的运行机制是基于Cookie。
                             如果浏览器禁用Cookie,那么Session机制将会失效。浏览器将不会保存JSESSIONID这个Cookie。

1、通过地址栏来传递Cookie的信息,自己手动加上;jsessionid
                                   http://localhost:8080/16_WEB_Session/2.jsp;jsessionid=2AA78907BE47396DA23DEB094269AFF3
                             2、可以通过在jsp中写路径时
                                   response.encodeRedirectURL("绝对路径")
                                   response.encodeURL("绝对路径")
                                   这两个方法来重写URL地址

(暂时无图)

3、当浏览器不支持Cookie时会自动的在地址后边加上Cookie的信息,还可以通过c:url标签来重写URL地址
                                   <c:url value="/2.jsp"></c:url>

(暂时无图)
                                   注意使用URL标签时,不用加上项目名,一般开发时,我们不太使用URL重写,因为URL重写不太安全。

10.  Session的活化和钝化
                             钝化:
                                       将一个HttpSession对象序列化到硬盘中我们称为Session的钝化。
                             活化 :

(暂时无图)
                                       将写入硬盘中HttpSession对象反序列化到内存中的过程我们成为Session的活化。
                             一般情况下,当服务器停止时,Session对象会被写入到硬盘中,然后当服务器再次启动时,会自动将硬盘中的对象加载进内存。
                             如果希望Session域中的属性可以和Session一起钝化到磁盘中,那这些属性必须实现java.io.Serializable接口

当访问服务器的用户过多时,会有非常多的会话产生,这些会话,每一个会话都会对应一个HttpSession对象。
                             这时在服务器的内存会存在大量的Session对象,但是这些对象并不是都在使用中,
                             所以我们希望将这些不使用的Session对象钝化到硬盘中,当这些对象再次使用时,在活化进内存。
                             在Tomcat的配置文件conf/context.xml文件的根标签中加入如下代码
                             <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
                             <Store className="org.apache.catalina.session.FileStore" directory="mySession" />
                             </Manager>
                             maxIdleSwap属性:指的Session闲置时间,当闲置一定时间以后,会自动钝化到硬盘中,单位:分钟
                             directory属性:Session钝化后的目标文件夹

11.  表单的重复提交,同一个表单中的内容多次提交到服务器中。

表单重复提交的危害:
                                 1、向数据库中插入大量的重复且没有意义的数据,占用服务器的资源。
                                 2、处理请求服务器并没有检查请求是否为重复的请求,导致恶意的攻击。
                            第一种情况:
                                         提交完表单以后,不做其他操作,直接刷新页面,表单会提交多次。这种情况产生的根本原因是,Servlet处理完请求以后,直接转发到目标页面。这样整一个业务,只发送了一次请求,那么当你在浏览器中点击刷新按钮或者狂按f5会一直都会刷新之前的请求。 
                              解决方案:
                                         使用重定向跳转到目标页面

      
                           第二种情况:
                                         在提交表单时,如果网速较差,可能会导致点击提交按钮多次,这种情况也会导致表单重复提交。产生的原因是因为提交按钮可以点击多次。
                              解决方案: 
                                         使提交按钮只能点击一次,通过js来完成。获取id为sub_btn的input并加入onclick事件。
                            
                              第三种情况:
                                         表单提交成功以后,直接点击浏览器上回退按钮,不刷新页面,然后点击提交按钮再次提交表单。产生的原因是因为服务器在处理请求时,不会检查是否为重复提交的请求。
                                解决方案:
                                        使用一个token的机制。
                                        token就是令牌的意思。
                                        服务器在处理请求之前先来检查浏览器的token。
                                        token由服务器来创建,并交给浏览器,浏览器在向服务器发送请求时需要带着这个token
                                        服务器处理请求前检查token是否正确,如果正确,则正常处理,否则返回一个错误页面
                                        服务器所创建的token只能使用一次。
                                        token一般使用一个唯一的标识。

在jsp页面中:


                                       在servlet中:
                               

170815-关于Session知识点的更多相关文章

  1. Session知识点

    知识点概要    - Session    - CSRF    - Model操作    - Form验证(ModelForm)    - 中间件    - 缓存    - 信号 内容详细: 1. S ...

  2. Session 知识点再整理(二) 自定义 Session 存储机制

    对于访问量大的网站,用默认的 Session 存储方式(以文件存储)不适合,因为文件的 I/O 开销会非常大,另外 Session 机制本身使 Session 不能跨机访问,在 Web 集群中无法达到 ...

  3. Session 知识点再整理(一)基本概念和原理

    Session 的概念 Session 和 Cookie 一样,也是针对 HTTP 的局限性而提出的一种保持客户端和服务器端会话连接状态的机制. Session 被称为会话,指用户在进入网站到浏览器关 ...

  4. session知识点总结

    1.session生成条件是怎样的?是登陆成功才生成?还是请求进来就生成session和sessionid? 答:Tomcat只要进来请求,就会生成session,同一个ip request来源用的都 ...

  5. session知识点小结

    Session: 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象HttpSession中. 2. 快速入门: 1. 获取HttpSession对象: Http ...

  6. Cookie与Session、CBV添加装饰器

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

  7. s11 day106-107 RBAC模块

    一.登录 把权限存在session中 1. rbac models from django.db import models class Permission(models.Model): " ...

  8. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  9. Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)

    一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...

随机推荐

  1. [官网]Prevent a worm by updating Remote Desktop Services (CVE-2019-0708)

    Prevent a worm by updating Remote Desktop Services (CVE-2019-0708) ★★★★★ https://blogs.technet.micro ...

  2. java 异常体系详细介绍

    一.异常概述与异常体系结构 异常:在Java语言中,将程序执行中发生的不正常情况称为"异常".(开发过程中的语法错误和逻辑错误不是异常). Java把异常当作对象来处理,并定义一个 ...

  3. 消息中间件 JMS入门

    1. JMS入门 1.1消息中间件 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环 ...

  4. Codeforces 1255E Send Boxes to Alice(前缀和+枚举+数论)

    我们考虑前缀和sum[i],如果将a[i+1]中的一个塞入a[i]中,则不影响sum[i+1],但是sum[i]++,如果将a[i]中的一个塞入a[i+1],则不影响sum[i+1],但是sum[i] ...

  5. NOI-LINUX

    先把配置背过吧: (set-background-color "gray15")(set-foreground-color "gray")(global-lin ...

  6. WPF游戏,使用move游戏开发

    我看了好多游戏的源码,其实每一个,我想做,rpg的都需要移动,那么wpf,win8应用,数据绑定,我们需要一个Thread来让人物移动. 于是用move. 在每个人物,自己和敌人,npc类,都有一个m ...

  7. MongoDB入门_MongoDB特色

    1. sql数据库与nosql数据库对比 nosql不支持实时一致性转而支持数据的最终一致性,数据有一定的延迟 redis数据库支持部分事物,而mongodb不支持事物 nosql数据库没有多表联查功 ...

  8. Linux服务器安装系统之1-LSI阵列卡Raid10配置方法

  9. deletefile 与KILL

    1.Kill 语句 从磁盘中删除文件.语法Kill pathname必要的 pathname 参数是用来指定一个文件名的字符串表达式.pathname 可以包含目录或文件夹.以及驱动器.说明在 Mic ...

  10. N^2取N

    序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 先把A B排序 然后pushA[1]+B[i](1<=i<=n)每次取出一 ...