新手菜鸟必读: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 相关文章推荐
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php获取系统变量方法小结
May 29 PHP
PHP处理会话函数大总结
Aug 05 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
浅谈php中变量的数据类型判断函数
Mar 04 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
PHP如何解决微信文章图片防盗链
Dec 09 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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/11/19 PHP
php UBB 解析实现代码
2011/11/27 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
Python中无限循环需要什么条件
2020/05/27 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
英语道歉信范文
2014/01/09 职场文书
自荐信需注意事项
2014/01/25 职场文书
新闻编辑求职信
2014/04/09 职场文书
建设工程授权委托书
2014/09/22 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
感恩教育主题班会
2015/08/12 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技