Cookie for PHP
2016-07-25 22:03
369 查看
首先为什么要引入Cookie呢,因为B/S架构(浏览器/服务器)架构是居于HTTP协议,其特点是无状态的(即最简单的请求–响应模式(也就是我向你请求数据而你给我返回数据)),但是他不能存储数据(请求完就完了,我不记得我向你请求过什么,也不知道你回答了 我什么),即无状态的协议。
那么为何
不能存储到变量中:不行,变量脚本周期结束时,被自动销毁。
不能存储到常量中:不行,常量脚本周期结束时,被自动销毁。
不能存储到数据库:不行,存储在数据库,脚本周期结束,不会被销毁。不能区分是哪台浏览器的的登陆成功,不能区分该凭证属于哪台浏览器。
SO 我们引进了会话技术
会话技术:即在同一台浏览器对某台服务器的多次请求周期内,用来持续性存储数据的一种技术。称之为会话技术
简单点来说就是能够存储你想要存储的数据 ,并且满足其特点
1. 区分浏览器。
2. 多次请求数据不会丢失即可
之一:服务器负责存储数据到浏览器端。
其二:浏览器在每次请求时,将记录下来的数据,携带到服务器端
图如下:
值得注意的是,是服务器端设定让其浏览器存储数据的,而浏览器每次请求时只是将记录下的值带在请求头里,携带到服务器。
(但值得注意的是,你现在用浏览器时,每次输入表单,浏览器都会询问你是否保存密码,这只是浏览器做的一种优化功能,将你的用户名密码存储下来,方便下次使用。有时候并不是服务器端设定的)。
Setcookie(KEY, VALUE)
Setcookie(‘name’, ‘kang’);
设置时,该设置指令,是在服务器向浏览器响应阶段,将(指令)数据传输到浏览器端。
通过 firebug的网络面板,进行观察:
此时,浏览器接受到该指令,则完成记录COOKIE数据。
$_COOKIE[key] = value;
浏览器向服务器发出请求时,会携带该服务器上所有有效的COOKIE到服务器端,通过firebug网络面板查看:
通过setcookie(key,value, 有效期=0)的第三个参数完成 设置有效期
允许设置有效期,达到控制失效时间点的目的。
例如:下面的操作,就是通过通过COOKIE的有效期完成的。
2月内免登陆,购物车关闭浏览器后,商品不消失。
有效期的表示方式为时间戳:函数time()可以获取当前时间戳!
一旦设置了有效期,到时立即失效,与浏览器是否关闭无关!
该cookie就称之为 持久COOKIE!
在设置COOKIE时,告知浏览器,该COOKIE的有效期。浏览器在发出请求时,判断COOKIE是否失效。也同时发生设置COOKIE时的响应阶段:
语法上,常见有效期设置如下:
某个时间点time()+N
0: 默认
Time()-1: 删除COOKIE的通用做法(标准做法)
可以设置一个很大的值,表示永不过期。通常是,PHP_INT_MAX(只是通常这么表示,其实际时间并不是永久)
COOKIE仅仅在当前路径,和 后代路径有效。
假设:
设置COOKIE: URL:www.domain.com/path/setcookie.php
访问COOKIE:
下面的红色的访问不到的。
URL:www.domain.com/getcookie.php
URL:www.domain.com/dir/getcookie.php
以下的URL请求可以访问到的
URL:www.domain.com/path/getcookie.php,当前路径
URL:www.domain.com/path/sub/getcookie.php,后代,子路径
URL:www.domain.com/path/sub/dir/getcookie.php,后代,子路径/子路径/…
为什么会存在路径这个属性:
由于COOKIE每次请求时携带到服务器端。很多的 COOKIE数据,会导致请求数据变得庞大,将COOKIE划分到各个路径中,减少每个路径下COOKIE的数量。
允许通过setcookie()的第四个参数进行设置。
Setcookie(key,value,有效期,有效路径=’’);
常规的设置方法如下:
现在很多项目都是单入口,只有一个请求路径。
music.baidu.com/下,设置的cookie,仅仅在music.baidu.com下有效.
即使
picture.baidu.com/也不能使用
可以通过使用第五个参数的形式,进行所在的一级域名的设置,设置后,该一级域名下的所有的二级子域名全都生效。
即
在设置有效域名时,通常设置有效路径为根目录。因为不同的站点,路径结构不同,需要保证能使用!
https: 加密之后的http。
如果将COOKIE设置了该属性。那么在浏览器向服务器发出请求时,如果发现为非https请求,则不发送该COOKIE。默认为false。
结果会导致
$_COOKIE中存在一个user的数组:
下次再请求,该cookie就会携带!
(即你这次只是响应回让浏览器记录cookie值,但浏览器并没有请求,所以并没有带去cookie值,所以并没有值显示)。
那么为何
不能存储到变量中:不行,变量脚本周期结束时,被自动销毁。
不能存储到常量中:不行,常量脚本周期结束时,被自动销毁。
不能存储到数据库:不行,存储在数据库,脚本周期结束,不会被销毁。不能区分是哪台浏览器的的登陆成功,不能区分该凭证属于哪台浏览器。
SO 我们引进了会话技术
会话技术:即在同一台浏览器对某台服务器的多次请求周期内,用来持续性存储数据的一种技术。称之为会话技术
简单点来说就是能够存储你想要存储的数据 ,并且满足其特点
1. 区分浏览器。
2. 多次请求数据不会丢失即可
以下我们来说说会话技术–Cookie技术
基本介绍:
Cookie是将会话数据,存储在浏览器端的一种技术。其特点是:之一:服务器负责存储数据到浏览器端。
其二:浏览器在每次请求时,将记录下来的数据,携带到服务器端
图如下:
值得注意的是,是服务器端设定让其浏览器存储数据的,而浏览器每次请求时只是将记录下的值带在请求头里,携带到服务器。
(但值得注意的是,你现在用浏览器时,每次输入表单,浏览器都会询问你是否保存密码,这只是浏览器做的一种优化功能,将你的用户名密码存储下来,方便下次使用。有时候并不是服务器端设定的)。
PHP中Cookie的基本使用
设置Cookie的值
函数Setcookie(KEY, VALUE)
Setcookie(‘name’, ‘kang’);
设置时,该设置指令,是在服务器向浏览器响应阶段,将(指令)数据传输到浏览器端。
通过 firebug的网络面板,进行观察:
此时,浏览器接受到该指令,则完成记录COOKIE数据。
获取Cookie数据
_COOKIE超全局数组变量。在服务器接收到浏览器的请求时,PHP核心程序,会将接收到的所有的COOKIE数据,整理到_COOKIE这数组中。$_COOKIE[key] = value;
浏览器向服务器发出请求时,会携带该服务器上所有有效的COOKIE到服务器端,通过firebug网络面板查看:
这里是php手册上对setcookie值的定义
有效期
默认:浏览器关闭时,COOKIE失效。该有效期的COOKIE称之为临时COOKIE,也叫会话COOKIE。通过setcookie(key,value, 有效期=0)的第三个参数完成 设置有效期
允许设置有效期,达到控制失效时间点的目的。
例如:下面的操作,就是通过通过COOKIE的有效期完成的。
2月内免登陆,购物车关闭浏览器后,商品不消失。
有效期的表示方式为时间戳:函数time()可以获取当前时间戳!
一旦设置了有效期,到时立即失效,与浏览器是否关闭无关!
该cookie就称之为 持久COOKIE!
在设置COOKIE时,告知浏览器,该COOKIE的有效期。浏览器在发出请求时,判断COOKIE是否失效。也同时发生设置COOKIE时的响应阶段:
语法上,常见有效期设置如下:
某个时间点time()+N
0: 默认
Time()-1: 删除COOKIE的通用做法(标准做法)
可以设置一个很大的值,表示永不过期。通常是,PHP_INT_MAX(只是通常这么表示,其实际时间并不是永久)
有效路径
URL路径。COOKIE仅仅在当前路径,和 后代路径有效。
假设:
设置COOKIE: URL:www.domain.com/path/setcookie.php
访问COOKIE:
下面的红色的访问不到的。
URL:www.domain.com/getcookie.php
URL:www.domain.com/dir/getcookie.php
以下的URL请求可以访问到的
URL:www.domain.com/path/getcookie.php,当前路径
URL:www.domain.com/path/sub/getcookie.php,后代,子路径
URL:www.domain.com/path/sub/dir/getcookie.php,后代,子路径/子路径/…
为什么会存在路径这个属性:
由于COOKIE每次请求时携带到服务器端。很多的 COOKIE数据,会导致请求数据变得庞大,将COOKIE划分到各个路径中,减少每个路径下COOKIE的数量。
允许通过setcookie()的第四个参数进行设置。
Setcookie(key,value,有效期,有效路径=’’);
常规的设置方法如下:
现在很多项目都是单入口,只有一个请求路径。
有效域名,常用
默认的 COOKIE仅仅在当前域名下有效music.baidu.com/下,设置的cookie,仅仅在music.baidu.com下有效.
即使
picture.baidu.com/也不能使用
可以通过使用第五个参数的形式,进行所在的一级域名的设置,设置后,该一级域名下的所有的二级子域名全都生效。
即
在设置有效域名时,通常设置有效路径为根目录。因为不同的站点,路径结构不同,需要保证能使用!
Secure,是否仅安全连接发送到服务器
http:https: 加密之后的http。
如果将COOKIE设置了该属性。那么在浏览器向服务器发出请求时,如果发现为非https请求,则不发送该COOKIE。默认为false。
HTTPonly,是否仅仅在http请求时所使用
默认值为false,当设置为true时 ,仅仅只能http请求使用,别的使用可能还包括(js,bom等)值得注意的是
COOKIE数据仅仅支持字符串类型
第二个参数,一定要是字符串!Cookie的Key,支持数组的写法
结果会导致
$_COOKIE中存在一个user的数组:
$_COOKIE存储请求时携带的COOKIE变量
$_COOKIE中,不会存储,当前脚本周期所设置的COOKIE。下次再请求,该cookie就会携带!
(即你这次只是响应回让浏览器记录cookie值,但浏览器并没有请求,所以并没有带去cookie值,所以并没有值显示)。
相关文章推荐
- 一个关于if else容易迷惑的问题
- 小心服务器内存居高不下的元凶--WebAPI服务
- Android Manifest 用法
- Android学习笔记(二九):嵌入浏览器
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 运维入门
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- 回顾 Firefox 历史
- 小白观察:微软释放出其基于 Chromium 的 Edge 浏览器
- 利用开源软件打造自己的全功能远程工具
- Php Installing An Expansion