新手菜鸟必读: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 相关文章推荐
10个实用的PHP代码片段
Sep 02 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
基于php验证码函数的使用示例
May 03 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
php语言的7种基本的排序方法
Dec 28 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
Python采用raw_input读取输入值的方法
2014/08/18 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
python实现PCA降维的示例详解
2020/02/24 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
销售经理工作职责范文
2013/12/03 职场文书
导师就业推荐信范文
2014/05/22 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
办公用品管理制度
2015/08/04 职场文书