关于Session和Cookie的一些理解

(不同应用环境Session含义不同,以下特指HTTP Session)

为什么会有Session和Cookie这样的东西存在呢,主要是因为HTTP协议是一个无状态的协议,它不对之前发生过的请求和响应的状态进行管理,也就是说无法根据之前的状态进行本次的请求处理,但往往实际要求我们对状态进行管理,于是就有了Session和Cookie。也许你会觉得是不是Session和Cookie两个合一块是一套完整的状态管理机制,但其实并不是这样的,他们两个是两套不同的状态管理机制。也许你又要问了,为什么非得弄两套呢?是不是有些多余呢?当然不是这样的,留两套是因为他们各有各的好处,我们在应用中可能综合利用,达到最佳的效果。

Cookie机制的实现

Cookie技术通过在请求和响应报文中写入Cookie信息(服务器解释为Cookie变量)来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

Session机制的实现

服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带sessionid过来了,就会使用内存中与之对应的session为之服务。(在这里说一下,其实说关闭浏览器session的生命周期就结束了,这是错误的,浏览器关闭只是销毁了会话Cookie,使得服务器又要再发一次session id过来,而这个session id对应得session就不是上一个session了,上一个session还存在服务器中,直到超出设定的时间、程序调用HttpSession.invalidate()、服务器关闭或服务停止才被销毁)

Cookie机制和Session机制的区别与联系

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以Session机制可能需要借助于Cookie机制来达到保存标识的目的,但实际上还有其他两种选择,这两种选择虽然形式不太一样,但目的都是相同的,都是要向服务器发送一个SESSIONID,这个时候我们就要想到给服务器传数据的两种方法getpost了。这两种选择就是基于这两种方法的。一个是URL重写,一个是在页面表单里面增加隐藏域。

其中URL重写又分为两种情况:

response.encodeRedirectURL(java.lang.String url) 用于在sendRedirect方法前对url地址进行重写。  

response.encodeURL(java.lang.String url)用于对表单action和超链接的url地址进行重写。

具体区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

 

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

   考虑到安全应当使用session。

 

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

   考虑到减轻服务器性能方面,应当使用COOKIE。

 

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

 

5、个人建议:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值