【转载】Session和Cookie之间区别与联系

一. 概念理解
你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接。这是因为你浏览某个网页的时候,WEB 服务器会先送一些资料放在你的计算机上,类似于你打的文字,选的一些东西什么的,Cookie 会帮你都纪录下来。当下次你再光临同一个网站,WEB服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容。

然而,cookie是什么呢?session又是什么?

先来了解几个概念。

1、无状态的HTTP协议:
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

2、会话(Session)跟踪:
会话,指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

二. Cookie
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

1、cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
1)Name 和 Value 属性由程序设定,默认值都是空引用。
2)Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。
3)Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
4)Expires 属性,这个属性设置此Cookie 的过期日期和时间。

设置cookie过期日期和时间

2、Path和Domain属性
–path:  
如果http://www.xxx.com/test/index.html 建立了一个cookie,那么在http://www.xxx.com/test/目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在http://www.xxx.com/test/test2/test3 里的任何页面都可以访问http://www.xxx.com/test/index.html建立的cookie。

但是,如果http://www.xxx.com/test/ 需要访问http://www.xxx.com/test/index.html设置的cookes,该怎么办?
这时,我们要把cookies的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。

–Domain:
比如: http://www.ccc.com/xxx/login.aspx 页面中发出一个cookie,Domain属性缺省就是www.ccc.com ,可以由程序设置此属性为需要的值。  
值是域名,比如www.xxx.com。这是对path路径属性的一个延伸。如果我们想让 www.xxx.com能够访问bbs.xxx.com设置的cookies,该怎么办? 我们可以把domain属性设置成“xxx.com”, 并把path属性设置成“/”。

3、会话Cookie和持久Cookie
若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在
硬盘上而是保存在内存里,当然这种行为并不是规范规定的。
若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。
这种称为持久Cookie。

4、Cookie具有不可跨域名性
就是说,浏览器访问百度不会带上谷歌的cookie。

三. Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录
在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。

1、两个问题:
1)什么东西可以让你每次请求都把SessionId自动带到服务器呢?显然就是cookie了,如果你想为用户建立一次会话,可以在用户授权成功时给他一个唯一的cookie。当一个用户提交了表单时,浏览器会将用户的SessionId自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,将结果返回给SessionId所对应的用户。试想,如果没有 SessionId,当有两个用户同时进行注册时,服务器怎样才能知道到底是哪个用户提交了哪个表单呢。

2)储存需要的信息。服务器通过SessionId作为key,读写到对应的value,这就达到了保持会话信息的目的。

2、session的创建:
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。

3、禁用cookie:
如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。
1)URL重写,就是把sessionId直接附加在URL路径的后面。
2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:

sessionID设置

4、Session共享:
对于多网站(同一父域不同子域)单服务器,我们需要解决的就是来自不同网站之间SessionId的共享。由于域名不同(aaa.test.com和bbb.test.com),而SessionId又分别储存在各自的cookie中,因此服务器会认为对于两个子站的访问,是来自不同的会话。解决的方法是通过修改cookies的域名为父域名达到cookie共享的目的,从而实现SessionId的共享。带来的弊端就是,子站间的cookie信息也同时被共享了。

四. 总结
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SessionCookie都是Web应用程序中用于跟踪用户状态的技术,它们在实现上有一些区别联系Session是服务器端技术,它通过在服务器端创建一个会话来跟踪用户状态。当用户第一次访问一个网站时,服务器会为该用户创建一个唯一的会话ID,并将该ID存储在服务器端的内存或数据库中。然后,服务器将此会话ID发送给客户端浏览器,通常是通过Cookie。在用户的后续请求中,浏览器会将此Cookie发送回服务器,服务器会使用该ID来识别用户并恢复其会话状态。 Cookie是客户端技术,它将数据存储在用户的浏览器中。当用户第一次访问一个网站时,服务器会将一个或多个Cookie发送给客户端浏览器,浏览器会将这些Cookie存储在本地计算机的文件中。在用户的后续请求中,浏览器会将这些Cookie发送回服务器,以便服务器可以使用其中的数据来识别用户并维护其状态。 因此,SessionCookie区别在于它们在哪里存储数据,以及它们如何跟踪用户状态。Session数据存储在服务器端,因此可以存储更多的数据,并且更安全。Cookie数据存储在客户端浏览器中,因此它们可以存储在本地,而无需每次都向服务器发出请求来获取数据。但是Cookie的安全性较低,因为Cookie可以被其他网站访问和修改。 ### 回答2: SessionCookie是用于在Web应用中跟踪和存储用户信息的机制。 首先,它们的联系在于它们都可以用于在Web应用中跟踪用户会话。当用户使用浏览器访问Web应用时,服务器可以创建一个唯一的标识符,并将其存储在Cookie中或者在服务器端的会话中。这个标识符可以用来跟踪用户的操作和存储用户的相关信息。 然而,它们之间也存在一些区别。 1. 存储位置:Cookie是存储在用户浏览器中的,而Session则是存储在服务器端的内存或数据库中的。因此,Cookie可以在用户多次访问同一个网站时保持数据的稳定,而Session则可以防止用户篡改数据。 2. 安全性:由于Cookie存储在用户浏览器中,因此容易受到攻击,比如Cookie被窃取或篡改。而Session存储在服务器端,对用户是透明的,因此相对安全一些。 3. 存储容量:Cookie的存储容量有限,通常为几KB到几十KB,而Session的存储容量可以更大,通常为几MB到几十MB。 4. 生命周期:Cookie可以设置一个过期时间,可以在浏览器关闭后仍然存在,并在下次访问同一网站时重新使用。而Session通常在用户关闭浏览器后过期,或者设置一个超时时间。 总之,SessionCookie都是用于跟踪和存储用户信息的机制,但它们有不同的存储位置、安全性、存储容量和生命周期等方面的区别。在实际应用中,我们需要根据具体需求选择合适的机制来实现用户会话的管理。 ### 回答3: SessionCookie都是用于在网络通信中保存和传递信息的技术手段,用途和作用相似,但在具体实现和使用上有一些区别。 首先,Cookie是将数据存储在用户的浏览器中,主要用于跟踪用户的状态和保存用户的个人偏好设置。它的作用是为了记录用户在该网站的活动,比如用户的登录状态、浏览记录、购物车中的商品等。Cookie信息通过HTTP头信息在浏览器和服务器之间传输,每次请求都会将该网站对应的Cookie信息发送给服务器。 而Session是将数据存储在服务器端的一种机制,它用来保存用户的会话状态。当用户访问一个网站时,服务器会为每个用户创建一个唯一的session对象,并将session对象的ID保存在Cookie中发送给客户端。当用户再次访问该网站时,浏览器会自动将Cookie中的session ID发送给服务器进行匹配,服务器根据Session ID找到对应的session对象,恢复用户的会话状态。 Session相对于Cookie更安全,因为Session数据存储在服务器端,用户无法篡改。而Cookie数据存储在客户端浏览器中,用户可以修改Cookie中的内容。另外,Session占用服务器资源,而Cookie占用用户端的存储空间。 SessionCookie之间也有联系,它们都可以用于浏览器和服务器之间信息的传递和状态的保持。Session的实现通常依赖于Cookie,服务器通过Cookie中的Session ID来识别和管理用户的会话状态。因此,可以CookieSession的一种具体实现方式。同时,Session可以利用Cookie来实现会话的持久化,通过设置Cookie的过期时间来控制Session的有效期。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值