听桶哥讲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服务器运行时,可能有 ...
随机推荐
- unity 发布web player版,网页打开报Failed to initialize player's 3D settings
开始时我装的是unity 5.0.0b1,不知道在哪找的这个版本. web player 装的什么版本也忘了. 最后卸载了web player,重新安装web player并另外安装一个unity4. ...
- MVC 请求处理流程(二)
[上一篇]中我们说到了对象AsyncControllerActionInvoker,在Controller的ExecuteCore方法中调用AsyncControllerActionInvoker对象 ...
- Flask + WSGI + Nginx 云部署
这几天学着用flask写一些rest api,然后部署到云上.这个过程虽然网上有很多的教程,但还是遇到不少的问题! 采用flask的原因是因为它比较容易上手吧.用flask有专门restful api ...
- nfs文件系统挂载错误及解决方法
挂载nfs时出现如下错误: 原因: 没有安装nfs客户端相关 解决方法: apt-get install nfs-common 参考资料: http://askubuntu.com/questions ...
- 关于easyui遇到的问题
easyui中的datagrid分页中有时候会碰到context.Request["rows"]的值等于nAn的问题:这是一般都是设置的pageSize的值不在pageList里引 ...
- Maven生命周期
Maven的生命周期抽象了构建的各个步骤,定义了他们的次序,但没有提供实现.Maven设计了插件机制.每个构建步骤都可以绑定一个或多个插件行为,而且Maven为大多数构建步骤编写并绑定了默认插件. M ...
- aspx前台调用cs后台方法
随着对于mvc的习惯使用,aspx页面渐渐用的不怎么用了,主要是生命周期感觉上比较慢,要么就用html+handler一般处理程序来装下逼.虽然不用,但还是要给刚工作的人讲下,相信不少人都想过:既然前 ...
- 黑马程序员:Java编程_7K面试题之银行业务调度系统
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号 ...
- Magento显示多货币,Magento 多货币设置
System - Configuration - Currency Setup 在右边Currency Options里的Allowed currencies勾选, 然后 System - Manag ...
- IOS 关于开发的APP跳转第三方应用的心得
昨天晚上自己做了个APP,想做个功能可以去跳转到手机上的微博,微信.找了好些资料,下面总结下自己的心得. 跳转的核心代码如下: if ([[UIApplication sharedApplicatio ...