菜单

深入理解session与cookie

2010年11月22日 - php

1. 当第一次请求一个网站,网站返回有session时只返回session的ID。当再请求这个网站的任何页面,都会把session的ID发送到服务器,页面返回不再有session ID 。

2. 当一个网站的请求页面有cookie时,再请求这个页面还会返回cookie,请求这个网站的任何页面,都会把所有cookie的名和值都发送到服务器。

3. 当我们把浏览器上的cookie禁掉。页面会每次返回一个不同的session ID.

关于session,必要条件是我们请求的网站需要识别同一个用户的请求,如用户登入。这样在用户第一次请求时因为没的sessionID,服务器给用户建立一个随机的sessionID(这个sessionID是唯一的,用于识别不同的用户),并返回给用户,当用户再请求时会把sessionID返回给服务器,服务器收到sessionID就知道这个用户是哪一个用户了。如果用户关闭了浏览器,则浏览器保存sessionID就会消失,但用服务器内的sessionID还在,如果过了一段时间(一般为20分钟,由服务器配置决定),服务器没有收到已保存的sessionID,服务器就抛弃了这个sessionId。如果用户禁用cookie,用户请求时,服务器也是会为用户建立一个sessionID并返回给浏览器,但是此时浏览器不保存起来,当用户再次请求时没有sessionID发送到服务器,服务器认为这个用户是第一次请求,给用户建立一个随机的sessionID,这样每次用户请求时都当做第一次请求,都会建立一个新的sessionID并返回给浏览器,可浏览器就是不接收。

关于cookie,如果服务器发送一个 cookie到浏览器,浏览器就保存了这个cookie,一个cookie包括cookie名和cookie值。浏览器每次再请求这个网站的时候都会把这个cookie名值发送给服务器。 如果用户禁用cookie,用户请求时,服务器也是会发送cookie给浏览器,但是此时浏览器不保存起来(跟session一样)。

Session和cookie的区别:

服务器只把session的ID发送给浏览器,session的值保存在服务器中,每次浏览器请求都会把sessionID发送给服务器。服务器通过sessionID识别同一个浏览器的请求。

Cookie则是把cookie的名和值保存在用户的电脑里,浏览器每次请求都会把cookie名和值发送给服务器。

因为cookie在用户的电脑里,所以看以被查看到,也可以被修改。也可以在本地被建立,javascrip脚本也可以写cookie,javascript建立的cookie和服务器建的cookie是一样的,没有本质的差别,可以相互识别和修改。

发表评论

电子邮件地址不会被公开。 必填项已用*标注