首先,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. C#中DateTime.Now.ToString()

    项目开发中遇到一个问题:C#编写的SQL语句中有时间值,刚开始直接将DateTime.Now进行toString()处理,源代码调试程序运行正常. 然后我的电脑重装了系统,再次运行程序就报错“从字符串 ...

  2. javascript 在ie8中报“缺少标识符、字符串或数字“问题再现:

    开发和测试使用Chrome浏览器比较多,客户反馈某个页面打不开,自己用Chrome打开一切正常,用ie8打开,果然页面展现卡在那儿了,并且报了"缺少标识符.字符串或数字".查看是在 ...

  3. Java 单列模式(Singleton)

    单例模式(Singleton) 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 目的:使得类的一个对象成为系统中的唯一实例. 如何保证一个类只有一个实例并且这个实例易于被访问呢? 我们都 ...

  4. 模块化以及requirejs和seajs

    我们用模块化的思想进行网页的编写是为了更好的管理我们的项目 模块与模块之间是独立存在的,每个模块可以独立的完成一个子功能. 模块化所涉及的规范commonjs,AMD,CMD,UMD 其中的commo ...

  5. iShare.js分享插件

    iShare.js是一个小巧的分享插件,纯JS编写,不依赖任何第三方库,使用简便. 为啥写这个插件? 因为在搭建个人blog时(还没有搭建好(¯﹃¯)),对目前国内比较受欢迎的分享插件都不太满意,主要 ...

  6. 项目中 poi 导出 出现html特殊符号的实体 (已解决)

    导出excel 时出现 类似这样的>  符号 , 大概是存到数据库也是这样,然后jsp解析可以解析出来,但是java不认得,需要个人写出解析方法. 废话不说,贴码: /** *转换html特殊符 ...

  7. keyFile 巩固练习

    系统 : Windows xp 程序 : noodles-crackme2 程序下载地址 :http://pan.baidu.com/s/1mhJ4Ems 要求 : 编写KeyFile 使用工具 : ...

  8. New Training Table

          2014_8_15 CodeForces 261 DIV2 A. Pashmak and Garden 简单题   B. Pashmak and Flowers    简单题   C. P ...

  9. GDB调试基本命令

    一.列文件清单 list / l 列出产生执行文件的源代码的一部分 //列出 line1 到 line2 行之间的源代码 (gdb) list line1, line2 //输出从上次调用list命令 ...

  10. [原创]IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135)

    IIS7.5下配置ASP+PHP环境及错误处理(0xc0000135) http://user.qzone.qq.com/93701178/blog/1398155812 操作系统更新至Win7或Wi ...