Session与Cookie的区别与联系

Note:由于刚从C#桌面开发转行到Java Web。所以如果小弟理解有错误的地方,希望大神们能够不吝赐教,也帮助小弟提高。先谢谢伟大的博友大笑


前几天看公司的项目代码,发现项目中有好多地方用到通过Request获取Session和Cookie的代码,此刻的我只是知道Session和Cookie是用来村数据的东西。具体Session和Cookie之间的区别和联系还不知道。正好晚上和朋友吃饭的时候,有个朋友问我知不知道Session和Cookie的区别,也是含糊的回答了一些。


今天查了一些资料,由于篇幅太大,个人对看到的资料总结如下,希望对大家有所帮助,如果有不正确的地方,请博友指出,我会及时更新。


session对Cookie的依赖、相互作用流程


Session对Cookie的依赖:Cookie采用客户端存储,Session采用的服务端存储的机制。Session是针对每个用户(浏览器端)的,Session值保存在服务器上,通过SessionId来区分哪个用户的Session。因此SessionId需要被绑定在浏览器端。SessionId通常会默认通过Cookie在浏览器端绑定,当浏览器端禁用cookie时,可通过Url重写(可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6之类的字符串)或者表单隐藏字段的方式将SessionId传回给服务器,以便服务通过SessionId获取客户端对应的Session。


具体一次的请求流程:当程序需要为客户端创建一个Session的时候,服务器首先检测这个客户端请求里面是否已经包含了Session的表示(SessionId),如果已经包含,则说明已经为客户端创建过一个Session,服务端根据SessionId检索出来Sesion并使用。如果客户端请求不包含SessionId,则为客户端创建一个Session,并生成一个SessionId返回给客户端保存。


Session与Cookie特性的总结

  • cookie存储在客户端、session存储在服务器端。
  • session依赖于cookie(原因:客户端与服务器之间保持状态的解决方案,sessionID存储在浏览器端的cookie里,当浏览器发送请求的时候,服务器用一个sessionID来区分是哪个用户session变量,要不然服务器怎么知道是那个用户发过来的请求呢)。
  • session一直存储在服务器内存中。当浏览器不变时请求的是同一个Session。当浏览器关闭时候,再打开session就会发生变化(“只要关闭浏览器,session就消失了”),原因:其实关闭浏览器前的session并没有消失,只是在关闭浏览器的时候seesionId消失了,再次打开浏览器时无法找到原来的session了,如果把原来的sessionId再发服务器,还是能找到原来的Session。
  • cookie 当设置cookie不设置生命周期时,保存在内存中,当关闭浏览器时cookie被清空。当设置生命周期时候,cookie被保存在硬盘中,所以当关闭浏览器,再打开还是可以访问到,知道生命周期结束。
  • sessionId 默认(通过Cookie)存储在浏览器的内存中,所以关闭浏览器,sessionId会消失。
  • 当浏览器禁用cookie时,通过URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段等技术重新将Session提交给服务器。
  • 保存在硬盘中的cookie,可能能会遭到cookie欺骗以及针对cookie的跨站脚本攻击。
  • 可以把sessionid保存在persistent cookie中,实现了跨窗口的session tracking(会话跟踪)
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
  • session会在一定时间内保在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  • Session默认生命名周期,我看到一些人说20分钟,一些人说30分钟。这个应该和服务配置有关。tomcat默认是30分钟。tomcat配置参数如下
     <!-- ==================== Default Session Configuration ================= -->
      <!-- You can set the default session timeout (in minutes) for all newly   -->
      <!-- created sessions by modifying the value below.                       -->
    
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
   
 =============额外小知识================

persistent cookies和session cookie的区别
persistent cookies :Cookie设置了生命周期,保存在硬盘中。
session cookie :Cookie没有设置生命周期,存储在内存中,是会话Cookie,随着浏览器关闭消失。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值