听桶哥讲session和cookie
首先,cookie和session是什么关系?
他们的关系很简单,利用和被利用的关系。
话说,由于http协议的无状态特性,同一client两个不同的请求之间完全独立,没有很好的办法进行一些数据共享,于是乎,http协议里引入了cookie,在协议层面可以进行一些数据共享,其原理是在客户端的电脑开辟某个空间,然后把cookie数据放入这个空间(空间通过域名进行隔离)。每个请求的时候,都在请求头带上这个域名的所有cookie数据 (相同path)
但由于数据在客户端进行存储,所以很容易被修改,安全性难与保证。所以更好的办法,是把数据放到服务器端,称之为session, 那问题来了?服务端怎么知道不同的请求是来自于同一个client了。于是乎,我们就可以利用cookie,只放一个标识,然后在服务器端通过标识去打到相应的session数据。这样,你改了标识就没用了。
所以,session利用了cookie, 但cookie不是必需,万一cookie被client禁用了,其实我们还可以利用 get, post。只不过相应复杂了。
那这个cookie是不是凭空产生的么?
服务器端又是如何通过cookie是找到session的呢?
那我们通过session_start()为例,
一步一步解开神秘的面纱。
当你第一次访问某网站的时候,服务端调用session_start();
他的大概步骤是:
1) 看cookie里有没有相应session_id的数据。(如果没有定义only_use_cookie,会依次找get,post里的参数,直到找到没止)
2) 1里面没有找到的话,这时在服务端会通过算法生成session_id的数据(通过与user-agent, ip,时间相关参数,保证唯一性),然后通过response头里进行set cookie,
3) 浏览器发现response里有setcookie的定义,在相应的空间里进行cookie存储 (与服务器无关)。
4) 那么下一个请求时,就会cookie里带上这个session_id, 服务器通过cookie里的session_id里的值,去服务器的某个位置(默认是/tmp下,文件名叫sess_{session_id}),把session数据读出来,然后填充到$_SESSION中,至此session_start完成。
所以cookie里的session_id不是凭空产生的,是通过服务端种的。cookie和session相当于一个key=>val的映射关系
了解了这个步骤,你就可以自己实现任何语言的session_start了
延伸问题,你们自己思考:
1) 如何严格的定义session过期
2) session是如何gc的
3) 为什么php默认的file session 会有性能问题。
严格定义session过期解答:$_SESSION['timestamp'] = time();
为什么php默认的file session 会有性能问题解答:创建/打开/关闭/删除文件当然会有性能问题,而且所有的session文件全部保存在一个目录中,session文件 数量多了后找一个文件也是会存在相当的性能问题。
听桶哥讲session和cookie的更多相关文章
- Session与Cookie的概念原理
前言: 本文没有任何代码,内容全部都是概念与运行原理,在使用一个技术前一定要弄清他的本质,下面会讲Session.Cookie.ServletContext的概念与他们的联系区别 Session概念 ...
- 《52讲轻松搞定网络爬虫》读书笔记 - Session和Cookie
为什么要用Session和Cookie? 简单一句话,因为Session和Cookie可以记录用户状态信息 嘶..这到底啥意思呢? 背景一:动态网页的出现 什么是静态网页 含义:一个网页的内容是HTM ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...
- Java Web学习(五)session、cookie、token
文章更新时间:2020/09/14 一.引言 动态网页兴起后,会话管理变成开发者需要考虑的一个问题,由于HTTP请求是无状态的,为了区分每个用户,此时引入了会话标识(sessionId)的概念,但是存 ...
- session与cookie的区别---
session和cookie的最大区别在于session是保存在服务端的内存中, 而cookie保存与浏览器或客户端文件里面: session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进 ...
- 转!!深入理解 Session 与 Cookie
摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...
- 对session和cookie的一些理解
由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正.); response.addCookie(c1); * ...
- session和cookie详解2
http 之session和cookie http://www.cnblogs.com/ForEverKissing/archive/2008/05/23/1205503.html Session简介 ...
- ASP.NET 之深入浅出Session和Cookie
在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...
随机推荐
- freeCAD定制界面
由于freecad接口是基于现代Qt工具包,它非常先进.窗口,菜单,工具栏和其他工具都可以修改,移动工作台,共享,键盘快捷键都可以设置.修改,以及宏,它可以录制和播放.定制界面是访问Tools -&g ...
- odi 12.2.1.1新特性
ODI 12.2.1.1现在已经发布,也可以OTN上下载,主要变化: Hyperion Essbase and Hyperion Planning 知识模块 Hyperion Essbase and ...
- Outlook查找未读邮件
1.查找新邮件的未读邮件,可以在下图中查找 2.恢复已删除邮件,如果邮件是未读邮件,在上图中是查找不到,只能通过视图去查找 步骤2内容摘自百度
- docker 源码分析 四(基于1.8.2版本),Docker镜像的获取和存储
前段时间一直忙些其他事情,docker源码分析的事情耽搁了,今天接着写,上一章了解了docker client 和 docker daemon(会启动一个http server)是C/S的结构,cli ...
- Spring学习笔记(2)——Bean的配置
要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...
- 对于undefined和null,还有处理这一类的数组
var total=0; var data=new Array(5);//定义了data数组,length为5,但是都是元素都是undefined. for(i=0;i<data.length; ...
- iOS 渐变进度条
#import <UIKit/UIKit.h> @interface JianBianView : UIView //为了增加一个表示进度条的进行,可们可以使用mask属性来屏蔽一部分 @ ...
- PAT题库-1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- 关于学习C++编程语言对中国软件发展的的一些思考!
从2000年UCanCode E-Form++ 图形可视化源码库2.0在国外开始销售以来,弹指一挥间已经快14年了.这14年里见惯了各种新技术的不断涌现.也见惯了各种科技公司的不断出现和消亡,仔细想来 ...
- Linux的任务计划--cron入门
Linux操作系统定时任务系统 Cron 入门 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动 ...