cookie和session的区别与联系

http://www.cnblogs.com/s1nker/p/4876284.html

基本概念

  对于许多人来说,都知道的是,cookie是存储在客户端的,可以用来放需要长期使用的内容,例如用户密码、用户账户等等,服务器是可以获取到cookie的内容的;而session则是存储在服务器端,通过唯一的session_id来区别用户,用于保存用户的登录状态和请求等,客户是不能获取到其内容的。

  这对于许多人来说都是比较基础的内容,也是表现形式上的区别,在这里我们深入的了解一下两者。

  为什么需要cookie?

  对于web程序,有一个需要考虑的问题是如何跟踪用户的会话,照常理来说,一个用户的行为只能对应于一个会话,比如开发购物车应用,就要考虑到用户的购物车中的内容,一个用户的购物车总不能装的是别人的商品吧?跟踪用户的会话就是用来区分不同用户的各自所挑选的商品。

  但是Web应用是基于HTTP协议来传输数据的,而HTTP协议是无状态的,在完成传输数据之后,客户端与服务器端的连接就会关闭,对于不同用户发生“将商品放入购物车”的动作时,不能够判断哪一件商品对应哪一位用户。在这里需要使用cookie,来解决HTTP协议在跟踪会话上的不足。

  cookie是服务器端给客户端分发的一种凭证,客户端要请求服务,就需要在发送数据时的同时发送cookie,服务器端通过识别cookie的内容,得知用户的身份,就可以知道用户的购物车是那一辆,再将商品放进去就可以了。

  cookie的内容

  要查看cookie可以在地址栏输入 javascript: alert(document.cookie); 就可以看到网站分发的cookie了。下面是百度上的cookie内容,在有使用cookie的网站使用才可行。

  cookie的内容就是这样的字符串,服务器通过读取这样的长长的加密过的cookie来获取用户的信息,这里有BAIDUID(即我的百度账号),以及其他的信息。

  cookie的分类

  实际上cookie也分为两种,分别是停留在浏览器所占内容的临时性的cookie,在页面窗口关闭之后就被删除,被称为session cookie;而另外一种是通过存放在硬盘空间中长期存在的cookie,这种cookie称为persistent cookie,也就是我们通常意义上所讲的cookie。

  通常session是依赖于session cookie来与客户端交互的,当然session的工作方式不仅仅限于这一种,还有其他的方式在下文会说到。

  cookie的属性

  以下表格是cookie的比较常用的属性及其说明:

属性名    描述
String name 该Cookie的名称。Cookie一旦创建,名称便不可更改
Object value 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码
int maxAge 该Cookie失效的时间,单位秒。如果为正数,则该Cookie在maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1
boolean secur 该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false
String path 该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”
String domain 可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”

  要注意到cookie的名称是无法修改的,同时cookie并不提供修改和删除的操作,如果说要修改cookie 的内容,则可以新建一个同名的cookie覆盖掉原来的即可;要删除cookie的话则新建一个同名的cookie,并设置其maxAge为0即可。

  需要考虑cookie中maxAge的一些特殊值所代表的含义,如果maxAge为负值,则表示cookie仅仅在当前浏览器窗口以及其打开的子窗口中有效,关闭时则失效,这也是cookie的默认maxAge值;如果maxAge为0,则说明删除该cookie,由于并没有删除cookie的操作,这里是需要通过cookie的maxAge来进行删除操作的。

  seesion的出现

  对于cookie是存储在客户端的,这种存储在客户端的信息往往是不安全的,所以后来又有了session,客户端浏览器向服务器发送请求的时候,服务器将客户端的信息以某种形式存储在服务器上,这种存储在服务器端的信息在客户第二次访问服务器的时候被使用,用来确定用户的状态等信息。打个比方而言,就相当于这是一张记录客户信息的表格,客户只要表明身份,服务器就能从这个表格中来获取客户的信息,根据信息进行服务。

  session的使用

  服务器会在客户端第一次请求服务的时候创建session对象,与cookie类似,session对象也是以键值对的形式存储的。每个session对象都有独立的session_id,对于特定的客户,就赋予特定的session,可以区分不同的用户。需要注意的是,通常是在用户请求具体服务的时候才会创建session,单纯的访问静态的内容(如HTML)并不会创建session。而在创建之后的每一次客户访问服务器都会更新session的内容,比如session的最后访问时间等等。

  还有一点是session的内容应该尽量的精简,因为session是存储在服务器端的,需要占用到宝贵的服务器资源(一般放在服务器内存里),所以这里在有大量客户访问的时候,会导致服务器的资源不够用。此外还会给session设置有效期,对于长时间没有活跃的session会从内存中删除,这也是我们用一些Web应用时会有说“登录超时”的情况出现。

  session的依赖实现

  对于上面所说的session,它对于用户来说是透明的,在客户请求服务的时候,客户端需要有一个标示自己身份的凭证,但是仅仅是标示自己的身份,所以这个标示会比较小。通过这个身份,服务器才能从内存中的多个session中知道用户是对应于哪一个session。

  一般来说session是要依赖于cookie来实现,这一点在上面讲到cookie的分类时说到,这时候生成的cookie就是上文提到的session cookie,而cookie的内容就是session的特定的id,这个cookie在浏览器关闭的时候就会失效。

  因此同一个机器上的两个浏览器窗口访问服务器的时候会生成两个不同的session。但是如果两个窗口是由同一个父窗口打开的话,子窗口会共享父窗口的cookie,所以这时候是共享一个session。

  如果禁用了cookie,那要怎么实现session?

  这个问题有时候会在面试的时候问到,在浏览器禁用cookie或者不支持cookie的时候,通常会采取一种叫做“URL重写”的方式来实现session,也就是以类似于GET方式,将session_id写在URL的后面,这样服务器也能获取到客户的session_id,通过这个独立的id就能识别特定的用户了。

  

参考资料: Cookie/Session机制详解 作者:fangaoxin

      老生常谈session,cookie的区别,安全性 作者:海底苍鹰

时间: 2024-10-08 20:49:41

cookie和session的区别与联系的相关文章

cookie 与 session 的区别与联系

1,禁用cookie 后 seesion 还能用吗? cookie是保存在本地的,而seesion是保存在服务器上的.所以两者没有直接的关系,禁用cookie后seesion依然可以用. session的运行依赖于session id,而session id是存在cookie中的.也即,如果客户端禁用了cookie(每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端.实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在H

Cookie与Session的区别与联系

一.Cookie机制 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你.Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 C

cookie 和session 的区别详解

这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容

cookie 和session 的区别详解 《转》

二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 C

【转】Cookie和Session的区别详解

转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session 机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择 二.会话cookie和持久cookie的区别 如果不设置

cookie和session的区别,session的生命周期,

这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容

get和post请求及进程和线程及cookie和session的区别

1)get和post请求的区别 2)进程和线程的区别 3)cookie和session的区别

cookie 和session 的区别详解(转载)

原文出处:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择. cookie机制.正统的c

网络中的cookie和session的区别

一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能要借助于cookie机制来达到保存标识的目的,但也可以使用其他方法. cookie的内容包括:名字,值,过期时间,路径和域.路径和域一起构成了cookie的作用范围.如果不设置过期时间,则表示这个cookie的生命周期为浏览器的会话期间,关闭浏览器窗口,coo

浅谈 Cookie 与 Session 的区别

1.cookie机制 Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器.IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范.网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求附上这些cookies . 具体来说cookie机制采用的是在客户端保持会话状态的方案.它是在用户端的会话状态的存贮机制,他需要用户