【修真院Java小课堂】cookie和session的区别

大家好,我是IT修真院上海分院第6期的学员,一枚正直纯洁善良的程序员今天给大家分享一下,Tiles框架简单介绍

cookie和session的区别 

背景介绍

为什么要使用cookie和session? 

HTTP是一个“无状态”协议,这意味着Web应用程序服务器在响应客户端请求时不会将多个请求链接到任何一个客户端。
然而,许多Web应用程序的安全和正常运行都取决于系统能够区分用户并识别用户及其权限。
这就需要一些机制来为一个HTTP请求提供状态。它们使站点能够在会话期间对各用户做出适当的响应,从而保持跟踪用户在应用程序中的活动(请求和响应)。   
   


    Cookie机制
            1)Cookie的基本特点   
             Cookie保存在客户端     
             只能保存字符串对象,不能保存对象类型     
             需要客户端浏览器的支持:客户端可以不支持,浏览器用户可能会禁用Cookie   
           2)采用Cookie需要解决的问题 
            Cookie的创建-通常是在服务器端创建的(当然也可以通过javascript来创建)
            服务器通过在http的响应头加上特殊的指示,那么浏览器在读取这个指示后就会生成相应的cookie了  
            Cookie存放的内容-业务信息("key","value"),过期时间,域和路径   
            浏览器是如何通过Cookie和服务器通信?       
            通过请求与响应,cookie在服务器和客户端之间传递,每次请求和响应都把cookie信息加载到响应头中;依靠cookie的key传递。

         Cookie:在客户端访问某个地址时,会将请求交到服务器进行处理,在发送请求的时候,浏览器会将页面的头部信息一并的交到服务器端进行处理。
             在处理的过程中,Cookie 在服务器端生成 ,在此同时,可以将一些需要保存的信息,存放到此 Cookie 中。生成 Cookie 对象时,需要确定具体的名称及具体的值,可以设置当前 Cookie 的过期时间,设置过期时间后,就相当于持久化了 Cookie 中的数据,此时的 Cookie 会以之前的 Cookie 名称,保存在客户端。
           
             
            如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
            这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
            如果设置了过期时间(setMaxAge(60*60*24)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
            存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式



Session保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。
        集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
          
         session的机制
           每次客户端发送请求,服务断都检查是否含有sessionId。   
           如果有,则根据sessionId检索出session并处理;如果没有,则创建一个session,并绑定一个不重复的sessionId。  
           1)基本特点    
           状态信息保存在服务器端。这意味着安全性更高     
            通过类似与Hashtable的数据结构来保存     
            能支持任何类型的对象(session中可含有多个对象) 
            2)保存会话id的技术
            (1)Cookie.这是默认的方式,在客户端与服务器端传递JSeesionId。缺点:客户端可能禁用Cookie
            区别和联系:
                具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
                同时我们也看到,由于服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的
                
           
                Cookie应用
                (一):判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
                (二):另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息</p>
           
                Session应用
                (一):登陆验证信息。
                (二):用户的各种私人信息,比如姓名等,某种情况下,需要保存在Session里
                (三):需要在页面间传递的内容信息,比如调查工作需要分好几步。每一步的信息都保存在Session里,最后在统一更新到数据库。
                
           
            3.常见问题
         
禁用cookie之后,session不能用
  
     
        
            4.解决方案
      

如果客户端禁用了 Cookie 的话,很多网站任然可以存储用户的信息。一种处理的方式是URL 重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。</p>
        另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。</p>


       URL重写有什么缺点
        
            对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,
            以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。
      
        使用隐藏的表单域有什么缺点
        
            仅当每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的A HREF超文本链接并不产生表单提交,
            因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程。
       
            
参考文献
            百度百科
 https://blog.csdn.net/u011145904/article/details/77745777
https://www.zhihu.com/question/31079651

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值