#cookie 与 session
cookie 与 session 是一对形影不离的好兄弟,所以:有cookie就会有sesssion,有session 就会有cookie。
cookie存在于客户端,session存在于服务端。cookie与session相配合,实现了用户认证的功能,解决了张三是张三的问题。
我们用下图来模拟一下客户端与服务端之间的对话:
![](https://box.kancloud.cn/2016-07-06_577c9b3a28e87.png)
是的,过程就这么简单,在实际的请求过程中,也的确如上图一样,cookie就这样产生了。
总结如下:
1、当浏览器第一次访问服务器时,确切地说是一个域名时,那么是不会带有cookie信息的,然后服务器就会给它分配一个。只要服务器为浏览器分配了cookie,那么在以后的访问中,浏览器就会自动带上这个cookie来访问我们了。
2、当然了,我们还会为这个cookie设置一个过期时间,如果超过了这个时间点,浏览器再访问服务器时,就会摈弃这个cookie,然后再由服务器给它分配另一个cookie。
cookie的确是一个敏感信息,因为如果用户掌握到了我们的cookie,就会以我们的身份去访问那个站点。所以cookie是不能够跨域的,就是说,A服务器为浏览器分配的cookie,浏览器在访问B站点时,是不会带上A服务器为其分配的cookie的。
在firefox中,我们如下查看cookie信息。
![](https://box.kancloud.cn/2016-07-01_5775f1713ae81.png)
在chrome中,我们如下查看cookie信息。
![](https://box.kancloud.cn/2016-06-20_576783350d159.png)
> 在这里,我们之所以要利用一些工具来查看cookie信息,是由于cookie的传递对于我们而言是透明的。浏览器由于自动进行了cookie传递,使得我们即使没有写发送cookie的代码,但cookie还是会由浏览器自动发送给服务器。当然,服务器发送给浏览器的cookie也是一样。这也是我们在分析一些数据流时,往往省略cookie数据的原因。
请多打开几个站点,看看他们都使用了什么cookie信息。
至于session,可以存在文件中,可以存在数据中,还可以存在于另外一些服务器(一台专门运行内存对象缓存系统的电脑)的内存中,它把数据存在哪里,以及怎么存储或读取的,并不是我们学习的重点。我们只需要知道,每一个cookie对应着<span class="text-danger">唯一</span>的一个session就可以了。
> session可以简单认为是一个小的数据库系统,它可以凭借一个叫做cookie的凭证来读取、写入、修改、删除数据。和数据库系统不同的是,它存的数据是有『有效期』的,过了这个有效期,它便会销毁数据。
在本章中,我们也正是利用了cookie与session的<span class="text-danger">唯一</span>性,来实现了用户认证。基本的验证流程如下:
![](https://box.kancloud.cn/2016-07-09_57807ccf3c93e.png)
cookie与session同时也是安全问题的一部分,前期有个了解就好,随着我们继续学习,以后将有机会在这方面进行深入的学习。
- 序言
- 第一章 准备知识
- 第一节:XAMPP
- 第二节:NAVICAT
- 第三节:GIT
- 第二章 HelloWorld
- 第一节:下载THINPHP5.0
- 第二节:启动xampp
- 第三节:hello thinkphp
- 第四节:Hello world
- 第五节:MCA
- 第六节:单引号与双引号
- 第三章 教师管理
- 第一节:新建数据库
- 第二节:CURD之R 读数据
- 3.2.1 时序图
- 3.2.2 连接数据库
- 3.2.3 直接读取数据
- 3.2.4 间接读取数据
- 3.2.5 使用V层显示数据
- 3.2.6 引入bootstrap
- 3.2.7 加入bootstrap样式
- 第三节:CURD之 C 增加数据
- 3.3.1 插入数据
- 3.3.2 表单传值
- 3.3.3 存储表单数据
- 3.3.4 自动时间戳
- 3.3.5 增加验证
- 第四节:CURD之 D 删除数据
- 3.4.1 什么是关键字
- 3.4.2 删除数据
- 3.4.3 定制删除链接
- 3.4.4 完善删除
- 第五节:CURD之 U 更新数据
- 3.5.1 读取数据
- 3.5.2 展示数据
- 3.5.3 修改数据
- 3.5.4 传递数据
- 3.5.5 接收数据
- 3.5.6 更新数据 方法一
- 3.5.7 更新数据 方法二
- 第六节:衔接各个action & 重构代码
- 3.6.1 index action
- 3.6.2 add action
- 3.6.3 insert action
- 3.6.4 delete action
- 3.6.5 edit action
- 3.6.6 update action
- 第七节:分页
- 3.7.1 调用内置分页
- 3.7.2 select与paginate(选学)
- 3.7.3 分页原理(选学)
- 3.7.4 调用page(选学)
- 第八节:模糊查询
- 3.8.1 增加查询
- 3.8.2 完善查询
- 第四章 登录与注销
- 第一节:cookie 与 session
- 第二节:静态方法
- 第三节:规划URL跳转
- 第四节:登录
- 4.4.1 登录流程
- 4.4.2 index action
- 4.4.3 login action
- 4.4.4 引入M层
- 4.4.5 异常Exception
- 第五节:注销
- 第六节:验证
- 4.6.1 action增加验证
- 4.6.2 使用构造函数验证
- 4.6.3 使用继承验证
- 第五章 E-R图与数据字典
- 第一节:第一张E-R图
- 第二节:实体间的关系
- 第三节:开发规范
- 第六章 班级管理
- 第一节:建立数据表
- 第二节:数据列表index
- 第三节:增加数据add
- 第四节:编辑数据edit
- 第五节:删除数据delete
- 第七章 学生管理
- 第一节:建立数据表
- 第二节:数据列表
- 7.2.1 显示性别
- 7.2.2 显示创建时间
- 7.2.3 显示班级名称
- 7.2.4 显示辅导员姓名
- 第三节:编辑数据
- 第四节:魔法函数
- 第五节:源码分析
- 第八章 课程管理
- 第一节:建立数据表
- 第二节:新增课程
- 第三节:编辑课程
- 8.3.1 edit
- 8.3.2 update
- 第九章 代码重构
- 第一节:add 与 edit
- 第二节:insert 与 update
- 第三节:模板继承
- 9.3.1 index.html
- 9.3.2 edit.html
- 9.3.3 小结
- 第十章 UML图
- 第一节:E-R图回顾
- 第二节:UML图
- 第十一章 菜单与路由
- 第一节:添加菜单
- 第二节:虚拟主机
- 第三节:定制路由
- 第十二章 开发调试
- 第一节:开启trace
- 第二节:查看日志
- 第十三章:总结