首先,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的更多相关文章

  1. Session与Cookie的概念原理

    前言: 本文没有任何代码,内容全部都是概念与运行原理,在使用一个技术前一定要弄清他的本质,下面会讲Session.Cookie.ServletContext的概念与他们的联系区别 Session概念 ...

  2. 《52讲轻松搞定网络爬虫》读书笔记 - Session和Cookie

    为什么要用Session和Cookie? 简单一句话,因为Session和Cookie可以记录用户状态信息 嘶..这到底啥意思呢? 背景一:动态网页的出现 什么是静态网页 含义:一个网页的内容是HTM ...

  3. 校内题目T2695 桶哥的问题——吃桶

    同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai​和美味值bib ...

  4. Java Web学习(五)session、cookie、token

    文章更新时间:2020/09/14 一.引言 动态网页兴起后,会话管理变成开发者需要考虑的一个问题,由于HTTP请求是无状态的,为了区分每个用户,此时引入了会话标识(sessionId)的概念,但是存 ...

  5. session与cookie的区别---

    session和cookie的最大区别在于session是保存在服务端的内存中, 而cookie保存与浏览器或客户端文件里面: session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进 ...

  6. 转!!深入理解 Session 与 Cookie

    摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...

  7. 对session和cookie的一些理解

    由于项目需要,最近用session容器比较多,传载的同时加上了自己的一些理解,不足之处还请大家补充和纠正.);                  response.addCookie(c1);   * ...

  8. session和cookie详解2

    http 之session和cookie http://www.cnblogs.com/ForEverKissing/archive/2008/05/23/1205503.html Session简介 ...

  9. ASP.NET 之深入浅出Session和Cookie

    在做人事档案管理系统中,对于Session和Cookie的使用后理解更加深刻了,下面对本知识点总结学习. Session是什么? 简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有 ...

随机推荐

  1. 关于u盘启动,关于UEFI,关于hp手提计算机

    这个国庆前夕,遇到点麻烦了:一台新的手提计算机,按照常规方法不能用u盘启动引导.导致也无法做备份.所以,研究了不少小时哦...终于也可以解决的. 关于u盘启动,一般常用的有:u大侠(推荐),大白菜(不 ...

  2. 【python】函数

    内置函数: abs('A') 报错:TypeError: bad operand type for abs(): 'str' 传入的参数类型不对 自定义函数: 1 def my_abs(x): 2 i ...

  3. 采用ubuntu系统来安装tensorflow

    最近在学习google新开源的深度学习框架tensorflow.发现安装它的时候,需要依赖python2.7.X;我之前一直使用的linux是centos.而centos不更新了,里面的自带的pyth ...

  4. matlab初学之strcat、num2str

    文章出处: http://blog.sina.com.cn/s/blog_6fb8aa0d01019id5.html http://wenda.so.com/q/1439143662729624 ht ...

  5. MP3播放器团队项目

    一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...

  6. VS2010,Qt插件安装使用

    用了几次的QtCreateor,不习惯. 果断换回VS 基本步骤: 1.安装VS2010 2.安装Qt Creator5 3.安装Qt插件 qt-vs-addin-1.2.2-opensource 就 ...

  7. Easyui简单布局

    1.创建布局 创建布局只需要添加 'easyui-layout' class 到 <div> 标记或者 在整个页面创建布局,即<body class="easyui-lay ...

  8. Android ——单元测试

    什么是单元测试 首先需要介绍一下什么是单元测试.很多人像我一样,本科并不是计算机专业出身的,如果在职的公司不要求做单元测试的话,可能对这个词并没有一个确切的概念.而即使是计算机专业出身,如果毕业以后写 ...

  9. Android上传图片到服务器

    一.android需要导入异步请求的jar包 AsyncHttpClient  public static void reg(final Context cont,Bitmap photodata,S ...

  10. 【转】我是如何在SQLServer中处理每天四亿三千万记录的

    原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...