当前位置: 首页 > news >正文

新手必读:session和cookie的区别

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

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

关于session

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

session

  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

  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日志中的输出,用于数据统计与用户跟踪。

相关文章:

  • Codeforces Round #272 (Div. 2) A. Dreamoon and Stairs 水题
  • 聚簇索引和非聚簇索引
  • 聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术
  • 排序算法大荟萃——希尔(Shell)排序算法
  • Java内存泄露的理解与解决
  • 大冰--寻人启事--one
  • Java反射访问私有变量和私有方法
  • 电源开关IC
  • Java中sleep和wait的区别
  • iOS的一些面试题分析总结(1)
  • sql中的group by
  • java的finally语句
  • 各种编程语言变量的数据类型
  • java解惑你知多少(一)
  • 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体...
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 2019年如何成为全栈工程师?
  • Effective Java 笔记(一)
  • mac修复ab及siege安装
  • Odoo domain写法及运用
  • SOFAMosn配置模型
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 老板让我十分钟上手nx-admin
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 智能网联汽车信息安全
  • Semaphore
  • ​业务双活的数据切换思路设计(下)
  • (07)Hive——窗口函数详解
  • (1)SpringCloud 整合Python
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (6)STL算法之转换
  • (C#)一个最简单的链表类
  • (Python第六天)文件处理
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)linux下的时间函数使用
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .Net Core与存储过程(一)
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Web窗口页属性
  • .NET 读取 JSON格式的数据
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET面试题(二)
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @ModelAttribute注解使用
  • @PreAuthorize注解
  • @Service注解让spring找到你的Service bean
  • @SuppressWarnings(unchecked)代码的作用
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [autojs]autojs开关按钮的简单使用