新手菜鸟必读:session与cookie的区别


Posted in PHP onAugust 22, 2013

session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述和辨析,希望能与大家共同探讨下。

session和cookie的最大区别在于session是保存在服务端的内存里面,而cookie保存于浏览器或客户端文件里面;session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进程关闭之后,session也就“消失”了,而cookie更多地被用于标识用户,它可以是长久的,用于用户跟踪和识别唯一用户(Unique Visitor)。

关于session

session被用于表示一个持续的连接状态,在网站访问中一般指代客户端浏览器的进程从开启到结束的过程。session其实就是网站分析的访问(visits)度量,表示一个访问的过程。

session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。

但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。

这里有一个很关键性的注意点,即session失效时间的设置,这里要分两方面来看:浏览器端和服务端。对于浏览器端而言,session与访问进程直接相关,当浏览器被关闭时,session也随之消失;而服务器端的session失效时间一般是人为设置的,目的是能定期地释放内存空间,减小服务器压力,一般的设置为当会话处于非活动状态达20或30分钟时清除该 session,所以浏览器端和服务端的session并非同时消失的,session的中断也并不一定意味着用户一定离开了该网站。目前Google Analytics和Omniture都定义当间隔30分钟没有动作时,算作一次访问结束,所以上图中session的最后一步不只是离开,也有可能是静止、休眠或者发呆的状态。

还有一点需要注意,就是现在的浏览器好像趋向于多进程的session共享,即通过多个标签或页面打开多个进程访问同一网站时共享一个 session cookie,只有当浏览器被关闭时才会被清除,也就是你有可能在标签中关闭了该网站,但只要浏览器未被关闭并且在服务器端的session未失效前重新开启该网站,那么就还是使用原session进行浏览;而某些浏览器在打开多页面时也可能建立独立的session,IE8、Chrome默认都是共享 session的,在IE8中可以通过菜单栏中的文件->新建会话来建立独立session的浏览页面。

关于cookie 

cookie 是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。用户每次访问站点时,Web应用程序都可以读取cookie包含的信息。

session的实现机制里面已经介绍了常见的方法是使用会话cookie(session cookie)的方式,而平常所说的cookie主要指的是另一类cookie——持久cookie(persistent cookies)。持久cookie是指存放于客户端硬盘中的 cookie信息(设置了一定的有效期限),当用户访问某网站时,浏览器就会在本地硬盘上查找与该网站相关联的cookie。如果该cookie 存在,浏览器就将它与页面请求一起通过HTTP报头信息发送到您的站点,然后在系统会比对cookie中各属性和值是否与存放在服务器端的信息一致,并根据比对结果确定用户为“初访者”或者“老客户”。

持久cookie一般会保存用户的用户ID,该信息在用户注册或第一次登录的时候由服务器生成包含域名及相关信息的cookie发送并存放到客户端的硬盘文件上,并设置cookie的过期时间,以便于实现用户的自动登录和网站内容自定义。

Apache自带的mod_usertrack模块可以在用户首次来到当前网站的时候给用户种下一个唯一的cookie(较长时间过期),这个 cookie是用户首次来当前网站的IP地址加上一个随机字符串组成的。同时在自定义WEB日志中在最后增加%{cookie}n字段可以实现 cookie在apache日志中的输出,用于数据统计与用户跟踪。

PHP 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
PHP遍历数组的三种方法及效率对比分析
Feb 12 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 #PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 #PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 #PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 #PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 #PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 #PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 #PHP
You might like
PHP中的加密功能
2006/10/09 PHP
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
PHP 常见郁闷问题答解
2006/11/25 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
微信小程序 同步请求授权的详解
2017/08/04 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
python eventlet绿化和patch原理
2020/11/21 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
中医专业职业生涯规划书范文
2014/01/04 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
工程售后服务方案
2014/06/08 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
浅析Django接口版本控制
2021/06/26 Python