1. Cookie
    2. 含义及作用

Cookie是网站服务器把少量的文本数据存储到客户端的硬盘或内存,或是从客户端读取数据的一种技术;

当你浏览某个网站时,服务器会向你的电脑发送一个cookie文本文件,它可以记录你的ID、密码等信息,当你发起请求时,带上cookie,网站读取cookie,进而读取你的信息,继续进行相对应的动作,如:已通过验证,直接登录;

cookie和session对比-LMLPHP

Cookie主要作用:标识用户,维持会话.

•      Set-Cookie/sessionidserver发送给clientcookie/SessionID

•        Cookieclient发送给server证明用户状态的信息(头:值成对出现)

 

    1. Cookie 格式

 

 

cookie和session对比-LMLPHP

 

•    Set-Cookie: HTTP响应头,Web服务器通过此Hπp头向客户端发送Cookie;

•    narne=value:这是每一个Cookie均必须有的部分。用户可以通过name取得Cookie中存放的值(Value)。在字符串“name=value”中,不含分号、逗号和空格等字符:

•    expires=date: Expires确定了Cookie的有效终止日期,该属性值date必须以特定的格式来书写“星期几,DD一岛位,1-YYHH:MM:SSGMT”,其中,GMT表示这是格林尼泊时间。反之,若不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省,则 Cookie的属性值不会保存在用户的硬盘中,而仅仅保存在内存中,Cookie将随浏览器的 关闭而自动消失;

•     domain=domain-name: Domain变量确定了哪些Internet域中的Web服务器可读取浏览器存储的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息。这项设置是可选的,如果缺省,值为该Web服务器的域名;

•    path=path : Path属性定义了Web服务器上哪些路径下的页面可获取服务器发送的 Cookie。如果Path属性的值为“/”,则Web}m务器上所有的WWW资源均可读取该Cookie。 同样,该项设置是可边的,如果缺省,则Path的属性值为Web服务器传给浏览器的资源路径名。借助对domain和path两个变量的设置,即可有效地控制Cookie文件被访问的范围。

路径与域一起构成cookie的作用范围。

 

•    Secure:在Cookie中标记该变量,表明只有当浏览器和WebServer之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS;

•    HttpOnly:禁止JavaScript读取。

 

每个 Cookie 文件都是一个TXT 文件, 都以 “ 用户名@网站 URL ” 来命名;

cookie和session对比-LMLPHP

    1. Cookie传输

通过http的request头,浏览器也不是发送它所接收到的所有Cookie,它会检查当前要请求的域名以及目录, 只要这二项目与Cookie对应的Domain和Path匹配,才会发送。对于Domain则是按照尾部匹配的原则进行的。发送的内容只有name:value,其他的属性是不发送的。

 

    1. Cookie种类

会话cookie:

未设置过期时间,当关闭浏览器窗口,cookie就消失。会话cookie一般保存在内存里。

硬盘cookie:

若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

Cookie它也是有限制的,大多数浏览器支持最大的为4096B的cookie

 

    1. 伪造cookie

伪造的时候需要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器,

 

    1. Session
    2. 机制

Session 是存放在服务器端的,

当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器

当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。

将session序列化后存入数据库中,虽然是没了时间的限制,但是随着时间的增加,这个数据库会变庞大。

 

    1. Session威胁
    2. sessionID 生成算法使用私有算法,或算法过弱,容易sequencer寻找规律
    3. 注销后改sessionID仍然 存活
    4. sessionID长期不变(针对一个浏览器);

 

 

    1. session和cookie对比

 

cookie数据保存在客户端,session数据保存在服务器端。

SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。

 

10-06 19:39