会话技术之COOKIE
会话技术之COOKIE#
一、需求##
1、什么是会话?###
会话是浏览器和服务器之间的多次请求和响应。为了实现某一个功能(比如买东西),浏览器和服务器之间可能会产生多次的请求和响应,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止,这期间产生的多次请求和响应加在一起就称之为浏览器和服务器之间的一次会话。
2、如何保存会话中产生的数据?###
在一次会话中往往会产生一些数据,可以通过会话技术(Session和Cookie)保存会话中产生的数据
二、COOKIE技术##
参考地址:https://www.cnblogs.com/zxx193/articles/4271872.html
1、什么是cookie?###
Cookie保存在客户端浏览器中,cookie是Http头的一部分,通过浏览器URL请求服务器页面时,它会被通过Http头的形式发送过去。被请求的页面,可以通过PHP来获取cookie的值。
Cookie和浏览器和域名相关,不同浏览器各自存储,当前域名只会携带当前浏览器存储的cookie发送,不会带上其他cookie去请求。
2、设置cookie###
2.1、语法####
bool setcookie(name : string, [value : string = ""], [expire: int = 0],[path : string = ""],[domain : string = ""],[secure : bool = false],[httponly : bool = false]);
2.2、参数说明####
- 参数 描述
- name 必需。规定 cookie 的名称。
- value 规定 cookie 的值。不设置既默认为空,一般用于删除该cookie值。
- expire 可选。规定 cookie 的过期时间,单位为秒。
- time()+36002430 将设置 cookie 的过期时间为 30 天。如果这个参数没有设置,默认为会话级cookie,那么 cookie 将在 session 结束后(即浏览器关闭时)自动失效。
- path 可选。规定 cookie 的服务器路径。
- 如果路径设置为 "/",那么 cookie 将在整个域名内有效.如果路径设置为 "/test/",那么 cookie 将在 test 目录下及其所有子目录下有效。默认的路径值是 cookie 所处的当前目录。
- domain 可选。规定 cookie 的域名。
- 为了让 cookie 在 example.com 的所有子域名中有效,您需要把 cookie 的域名设置为 ".example.com"。当您把 cookie 的域名设置为 www.example.com 时,cookie 仅在 www 子域名中有效。
- secure 可选。规定是否需要在安全的 HTTPS 连接来传输 cookie。如果 cookie 需要在安全的 HTTPS 连接下传输,则设置为 TRUE。默认是 FALSE。
- httponly 可选。规定除http协议可以访问外,其他程序或者协议是否可以访问。如果cookie仅允许http协议可访问,这设置位true。默认为false。
2.3、COOKIE会话图解###
参考地址:
3、获取COOKIE###
文件basic.php如下:
<?php
setcookie('student[name]', 'gaogzhen');
setcookie('student[age]', '18');
?>
文件response.php如下:
<?php
/**
* Created by PhpStorm.
* User: gaogzhen
* Date: 2019-03-24
* Time: 15:32
*/
echo "<pre style='color: #00CC66'>";
if($_COOKIE) {
var_dump($_COOKIE);
}
echo "</pre>";
?>
结果:
4、销毁cookie和永久(计算机所能表示的最大时间)有效###
setcookie(key : string = '', value : string = '',exprie : int = time()-1);/标准删除cookie做法
setcookie(key : string = '', value : string = '',exprie : int = PHP_INT_MAX);/永久有效
ps: time()为获取当前时间 ,time()-1 就为过期。PHP_INT_MAX当前计算机所能表示的最大时间,可以认为永久有效。
5、实例###
5.1、浏览器查看cookie####
chrome浏览器查看&编辑cookie地址(URL):chrome://settings/cookies
firefox浏览器F12查看cookie信息
5.2、测试用php文件####
basic.php如下:
<?php
setcookie('do_httponly', 'basics', 0, '','', false, true);
setcookie('no_httponly', 'basics', 0, '','', false, false);
?>
response_basic.php代码如下:
<?php
/**
* Created by PhpStorm.
* User: gaogzhen
* Date: 2019-03-24
* Time: 15:32
*/
echo "<pre>";
var_dump($_COOKIE);//获取cookie-$_COOKIE['key']
echo "</pre>";
?>
<script>
console.log(document.cookie);
</script>
5.3、首次访问--cookie####
浏览器首次请求页面basic.php,请求头里面此时还没有此cookie
ps:浏览器只携带有效cookie
5.4、同一浏览器再次访问相同域名下的文件及获取COOKIE:####
httponly设置为true和false的结果:
6、注意事项###
6.1、语法####
cookie的值,仅仅支持字符串类型。虽然可以把对象序列化为对象,但是会增大cookie所占用的空间,会占用大量资源和带宽,一般不建议使用。。
6.2、设置COOKIE的key小技巧####
setcookie('student[name]', 'gaogzhen');
setcookie('student[age]', '18');
使用时,被整理成数组。
6.3、$_COOKIE存储的值####
如图:
6.4、setcookie() 语句前不能有任何输出####
类似header() , setcookie() 语句前不能有任何输出语句。
如图:
<?php
echo 'Before<br />';
setcookie('before', 'before');
?>
三、参考地址##
1、参考地址:https://www.cnblogs.com/zxx193/articles/4271872.html
2、参考地址:http://www.runoob.com/php/func-http-setcookie.html
3、视频地址:https://pan.baidu.com/s/1NftDBcSO_UbCwo171qFEyw 提取码:toy8