热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

重温那些模糊的知识点Session,Cookie

众所周知,Session和Cookie是在用来保存用户数据的技术,我们得引入“会话”这个概念, 一次“会话”是用户打开浏览器进行一系列操作后,关闭浏览器的过程。在会话过程中,我们用

    众所周知,Session和COOKIE是在用来保存用户数据的技术,我们得引入“会话”这个概念, 一次“会话”是用户打开浏览器进行一系列操作后,关闭浏览器的过程。在会话过程中,我们用到Session,COOKIE
去保存用户数据,这是共同点。

我们来说说他们的区别(大致的理解):



COOKIE:是作用在客户端的技术。

session:是依赖在服务器端的技术。



首先,来看一下COOKIE:

    一.COOKIE是javax.servlet.http.COOKIE类的对象;

        构造方法:COOKIE(String name,String value);


    二.COOKIE能保存数据,并且通过属性设置可以永久的保存数据,


    三.COOKIE是存放在客户端的文件中的(路径自己指定,当然不指定就有默认的路径---/主机/端口号/项目名称/包名/文件名);

       那么客户端是通过哪种路径去读文件的呢?

    答:

             1.当设置COOKIE的path是"/"的时候,那么客户端读取COOKIE的时候,是按照(以本地例)http://localhost:xxxx/去读COOKIE文件的,也就是说,web容器中的所有web应用都可以读取这个COOKIE文件数据;

            2.当设置的是"/项目名称",那么只有这一个项目能够访问;


           3.默认设置(上面写了),只有具体的类能够访问。

         *---这里写一下客户端携带COOKIE去访问服务器取得COOKIE添加COOKIE的过程,加深一下对整个过程的理解:(没画图)

              

                   1.客户端发出一个请求,生成一javax.servlet.http.Request对象request和javax.servlet.http.Response对象response;


 
                 2.web容器收到了客户端的请求,发送给服务器,期间request对象携带COOKIE
到达了服务器;


                   3.服务器通过调用request对象的getCOOKIEs方法来获取所有的COOKIE并且对其进行解析,解析完成后,通过response的addCOOKIE方法添加一个COOKIE对象(键-值)---在创建COOKIE的时候我们就可以通setMaxAge(int
age)setPath(string path)指定其
存活期和保存COOKIE文件的目录;



                4.request经过转发后使命终结,response经过服务器的转发,回到了客户端,response将其携带的COOKIE信息告诉客户端,客户端浏览器在指定路径下保存COOKIE的文件中添加COOKIE数据;


5.一次请求和响应结束。

*首先得知道:COOKIE是存放在客户端的在Documents
and Settings 目录下的用户文件
中,以.txt文件的形似存在;

*其次,客户端发出request请求是携带者COOKIE数据到达服务器的;

*最后是,是response对象携带者服务器添加的COOKIE到达客户端,并最后写入文件中的。



下来是Session:

session是在服务器端的会话技术,

一.对应javax.servlet.http.HttpSession类;

      获取方式:1.通过request的getSession();


                2.通过request的getSession(boolean create);

       以上方式的区别:和hibernate中的获取session的两种方式getCurrentSession()和openSession()类似,第一个:获取当前servlet上下文的的session,如果存在session,那么获取,如果不存在,创建一个新的,第二个:通过传递参数来设置当Servlet上下文中不存在session,是否要创建session,true:创建,false:不创建。



     二.session也可以保存数据,但是数据的最长有效期只有30min(这里指的是闲session
30min),虽然可以设置但是也得不会超过30min.



     三.session存放在服务器的缓存中,这里得说说session的状态,

 
       1.被创建状态,---通过上面的方法获取并初始化。


 
        2.存在内存中的活跃状态。

 
               ---被使用时候,存放在内存中,服务器没有关闭。



 
        3.序列化到磁盘的状态

                 ---当关闭服务器的时候,session就会被序列化到硬盘上,以不可读文件的形式存在,具体在服务器(tomcat)的/work/catalina/localhost/项目名目录下,当再次重启服务器的时候,文件文件就会消失,数据被读到内存中。

 

 
     4.销亡状态  --可以通过web.xml进行配置

单位/分钟..

...

 *设置的时间超不过30min,这里还得说说,session到底什么时候消亡?

答:有些人认为是:当浏览器关闭的时候消亡---这种理解是错误的,其实是在配置的时间到的时候消亡,如果没有配置消亡时间,那么就是在“闲置”session
30min后自动消亡。



       *---这里和上面一样通过描述,服务器端设置session后对用户数据共享的过程,来加深对session的理解:

          1.服务器接收到客户端发来的请求后,通过request对象来向整个servlet上下文写通过session写共享数据,


          2.写完后,这个数据保存在服务器端(web容器)---在生成session的过程中,生成一个唯一的标示这个session的sessionID,并且生成了一个COOKIE形式

为:JSESSIOnID=sessionID,服务器通过response把这个COOKIE响应给客户端。

         3.客户端收到COOKIE数据,然后把数据写到了客户端COOKIE文件中。



         4.当客户端在向服务器request发起请求的时候,就像上面所说的那样,request请求会携带者COOKIE数据一同到达服务器。


         5.当要获取session的中的数据的时候,服务器就会对request携带的COOKIE进行解析,得到name=JSESSIONID的COOKIE的value值,这个value值是在服务器端存放的session的sessionID,服务器通过把内存中的session的sessionID和在request请求中获取的sessionID进行对比,得到这个session对应的数据,这样就实现了对数据的保存和对用户程序的共享



到此,个人理解陈述完毕,希望大家指正其中错误的观点,共勉。

至于session和COOKIE的应用就不多说了。


写之记录记录,。。。。

   

重温那些模糊的知识点 ----Session,COOKIE,布布扣,bubuko.com


推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
author-avatar
Federer2012_554
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有