web用户中心设置全局token

WEB开发中的cookie与session

2015-11-20  本文已影响468人  大明白

会话控制

会话控制思想就是能够在网站中跟踪一个用户,我们跟踪用户就可以做到对用户的支持,并根据授权和用户身份显示不同内容、不同页面。
HTTP是一个无状态的协议,HTTP协议无法来维护两个事务之间联系。当一个用户在请求一个页面后再请求另外其他页面时,HTTP将无法告诉我们这两个请求是来自同一个用户。这是因为每一个HTTP的处理(一个请求和相应的回复)都是相互独立的,在HTTP中没有持续状态是非常稳定的,因为减少了很多额外的信息交互。

HTTP中没有持续状态也使Web应用的发展出现了问题,因为我们想要“记住”用户但是在请求中无法让我们去区分不同客户。
当静态网站发展到动态网站时,我们需要面对维护某种状态,出现了会话控制。PHP的会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字。它可以保存在用户机器里的Cookie中,或者通过URL在网络上传递。

会话ID就像一把钥匙,允许我们注册一些特定的变量,也称为会话变量。这些变量的内容保存在服务器端。会话ID是客户端唯一可见的信息。如果在一次特定的网站连接中,客户端可以通过Cookie或URL看到会话ID,那么我们就可以访问该会话保存在服务器上的会话变量。

Cookie和session都是可以暂时保存在多个页面中使用的变量,但是它们有本质的区别。

Cookie存放在客户端浏览器中,session保存在服务器上。

Cookie介绍

Cookies现在经常被大家提到,那么到底什么是cookies,它有什么作用呢?cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当浏览某网站时,由WEB服务器置于硬盘上的一个非常小的文本文件,它可以记录用户ID、密码、浏览过的网页、停留的时间等信息。当再次来到该网站时,网站通过读取cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等。

从本质上讲,它可以看作是你的身份证。但cookie不能作为代码执行,也不会传送病毒,且为你所专有,并只能由提供它的服务器来读取。保存的信息片断以“名/值”对(name-valuepairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。一个网站只能取得它放在你的电脑中的信息,它无法从其它的cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。

要了解cookie,必不可少地要知道它的工作原理。一般来说,cookie通过HTTP Headers从服务器端返回到浏览器上。首先,服务器端在响应中利用set-cookie header来创建一个cookie,然后,浏览器在它的请求中通过cookie header包含这个已经创建的cookie,并且将它返回至服务器,从而完成浏览器的认证。

Session介绍

Session中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息。比如,打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session

然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖。

而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的发展,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。

有时候session也用来指这种解决方案的存储结构,如“把XXX保存在session里”。由于各种用于WEB开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案。

Cookie与session比较

具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标志,所以session机制可能需要借助于cookie机制来达到保存标志的目的,但实际上它还有其他选择。

cookie机制

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本,如JAVASCRIPT或者VBSCRIPT也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

Cookie的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不会存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

session机制

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

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

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动地按照规则把这个标志发送给服务器。一般这个cookie的名字都是类似于SESSIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务端。
经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段,就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id 传递回服务器。

上一篇下一篇

猜你喜欢

热点阅读