老生常谈session,cookie的区别,安全性

一,为何session,cookie常常会有人提到php

作web开发的人基本上都会用session和cookie,可是仅仅只是会用,并不知 道session和cookie的真正的工做原理,都只是凭着感受来猜想。web开发者只要利用它们来完成工做就好了,因此每一个人的理解基本都会有大同小 异,我想这就是session,cookie常常会被讨论的缘由。本文也是根据我的经验,以及我的所学,对session,cookie的一些见解,纯属 我的看法,但愿获得你们的更正和建议。css


二,什么cookiehtml

cookie分为二种web

1,以文件方式存在硬盘空间上的长期性的cookie浏览器

2,停留在浏览器所占内存中的临时性的cookie安全

浏览网站时,你会常常发现网站登陆的地方,会有提示,问你是否是要记住本身的登陆状态,像这种状况,登陆时填写的一些信息会被以文件的方式存放在客户端的硬盘上。服务器

当用户登陆后,session会在cookie端产生一个session_id,这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后,session_id也要消失了。cookie

cookie采用的是在客户端保持状态的方案,它是客户端的会话状态的一种储存机制。它 是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头信息向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文 件,或者本地内存中数据,它会自动将同一服务器的任何请求缚上这些cookies,因为采用服务器端保持状态的方案在客户端也须要保存一个标识,因此 session机制借助于cookie机制来达到保存标识的目的,这样就能够解决HTTP协议无状态的缺陷。网络

三,什么是sessionsession

session是一种服务器端的信息管理机制,它把这些文件信息以文件的形势存放在服务器的硬盘空间上,这种状况是默认的,能够用memcache把这种数据放到内存里面。请参考web集群时利用memcache来同步session

当客户端向服务器发出请求时,要求服务器端产生一个session时,服务器端会先检查 一下,客户端的cookie里面有没有session_id,是否已通过期。若是有这样的session_id的话,服务器端会根据cookie里的 session_id把服务器的session检索出来。若是没有这样的session_id的话,服务器端会从新创建一个。PHPSESSID是一串加 了密的字符串,它的生成按照必定的规则来执行。同一客户端启动二次session_start的话,session_id是不同的。

Host *****************.com
User-Agent Mozilla/5.0 (X11; U; Linux  i686; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Accept text/css,*/*;q=0.1
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
Referer http://***************.com/
Cookie BX=7f34kbl5d3m3g&b=3&s=9t;  AWSUSER_ID=awsuser_id1267685109158r8091;  PHPSESSID=us1o22h4iveo4uni3iksabreh4
If-Modified-Since Tue, 29 Jun 2010 07:55:38  GMT

上面是一次请求的头信息。

session产生的session_id放在cookie里面,若是用户把 cookie禁止掉,是否是session也不能用了呢?禁止掉cookie后,session固然能够用,不过经过其余的方式来得到这个 sessionid,好比,能够根在url的后面,或者以表单的形势提交到服务器端。从而使服务器端了解客户端的状态。

四,session和cookie谁更安全

就我的而言,我以为session更安全一点,我如下几点见解。

1,若是session和cookie同样安全的话,两者就没有并要同时存在了,只要cookie就行了,让客户端来分提服务器的负担,而且对于用户来讲又是透明的。何乐而不为呢。

2,session的sessionID是放在cookie里,要想功破session 的话,第一要功破cookie。功破cookie后,你要获得 sessionID,sessionID是要有人登陆,或者启动session_start才会有,你不知道何时会有人登陆。第 二,sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过时时 sessionid也会失效,想在短期内功破加了密的 sessionID很难。session是针对某一次通讯而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文 本文件,谁安全很显然了。

3,若是session这么容易被功破,这么不安全的话,我想现有的绝大部分网站都不安全了。

相关文章
相关标签/搜索