Session 与 cookie详细面试解析

Session 与 cookie 的区别

1.cookie 数据存放在客户的浏览器上,session 数据放在服务器上,以文件的形式存放,可以从 php.ini 里面的 session.save_path 找到存放位置

2.cookie 不是很安全 ,cookie 可以进行 cookie 欺骗,别人可以获取 cookie 中的 session id 考虑到安全应当使用 session。

3.session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

4.考虑到减轻服务器,性能方面,应当使用 COOKIE。

5.单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

6.所以个人建议:将登陆信息等重要信息存放为 SESSION 其他信息如果需要保留,可以放在 COOKIE 中

什么是 Session?

Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。

什么是 Cookie?

Cookie 意为 “甜饼”,是由 W3C 组织提出,最早由 Netscape 社区发展的一种机制。
目前 Cookie 已经成为标准,所有的主流浏览器如 IE、Netscape、Firefox、Opera 等都支持 Cookie。
由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份。
怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。
这样服务器就能从通行证上确认客户身份了。这就是 Cookie 的工作原理。
Cookie 实际上是一小段的文本信息。
客户端请求服务器,如果服务器需要记录该用户状态,就使用 response 向客户端浏览器颁发一个 Cookie。
客户端浏览器会把 Cookie 保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提交给服务器。
服务器检查该 Cookie,以此来辨认用户状态。服务器还可以根据需要修改 Cookie 的内容。

Session 的优缺点?
优点

如果要在诸多 Web 页间传递一个变量,那么用 Session 变量要比通过 QueryString 传递变量可使问题简化。
要使 WEb 站点具有用户化,可以考虑使用 Session 变量。
你的站点的每位访问者都有用户化的经验,基于此,随着 LDAP 和诸如 MS Site Server 等的使用,已不必再将所有用户化过程置入 Session 变量了,而这个用户化是取决于用户喜好的。
你可以在任何想要使用的时候直接使用 session 变量,而不必事先声明它,这种方式接近于在 VB 中变量的使用。
使用完毕后,也不必考虑将其释放,因为它将自动释放。

缺点

Session 变量和 cookies 是同一类型的。
如果某用户将浏览器设置为不兼容任何 cookie,那么该用户就无法使用这个 Session 变量!
当一个用户访问某页面时,每个 Session 变量的运行环境便自动生成,这些 Session 变量可在用户离开该页面后仍保留 20 分钟!(事实上,这些变量一直可保留至 “timeout”。“timeout” 的时间长短由 Web 服务器管理员设定。一些站点上的变量仅维持了 3 分钟,一些则为 10 分钟,还有一些则保留至默认值 20 分钟。)所以,如果在 Session 中置入了较大的对象(如 ADO recordsets,connections, 等等),那就有麻烦了!随着站点访问量的增大,服务器将会因此而无法正常运行!
因为创建 Session 变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用 session 变量将会导致代码不可读而且不好维护。

Cookie的优缺点?
优点

极高的扩展性和可用性
通过良好的编程,控制保存在 cookie 中的 session 对象的大小。
通过加密和安全传输技术(SSL),减少 cookie 被破解的可能性。
只在 cookie 中存放不敏感数据,即使被盗也不会有重大损失。
控制 cookie 的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的 cookie。

缺点

Cookie 数量和长度的限制。
每个 domain 最多只能有 20 条 cookie,每个 cookie 长度不能超过 4KB,否则会被截掉。
安全性问题。如果 cookie 被人拦截了,那人就可以取得所有的 session 信息。即使加密也与事无补,因为拦截者并不需要知道 cookie 的意义,他只要原样转发 cookie 就可以达到目的了。
有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

使用场景

cookie 用于存放前台临时内容,比如 sessionid,购物车业务中的商品信息,使用容易被窃取。
Session 用于存放后台的用户信息跟 cookie 进行会话机制,用于系统登录业务逻辑

作用

cookie 的作用是解决 HTTP 协议中缺少无状态缺陷的问题
由于 cookie 是在客户端,并不安全,另外如果浏览器禁用了 cookie 也会导致会话记录失败.
而 session 存储在服务器,是相对安全的。由服务端很方便控制存储到各种介质中.
php 的 php.ini 配置文件里可以设置 session 的路径和回收空置率的.

Cookie被禁用session能否使用?

Cookie 被禁用时并不影响 session 的使用,只不过 coookie 不能存放 sessionid 而已,可以使用 hidden 隐藏区域存放

① 由于本网站资源是搜集整理而成,版权均归原作者所有。本站仅提供一个观摩学习的环境,将不对任何资源负法律责任。
② 若无意中侵犯到您的版权利益,请来信联系我们,我们会在收到信息后会尽快给予处理。
⑥本公告的解释权及对本网站使用的解释权归结于 Drexi.cn-爱分享
Drexi-爱分享 » Session 与 cookie详细面试解析