重温那些模糊的知识点 ----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进行配置

<session-config>

<session-timeout>单位/分钟..

...

</...>

</...>

 *设置的时间超不过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的应用就不多说了。


写之记录记录,。。。。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值