[Toc]
一、为什么要用会话控制
我们需要我们的站点可以跟踪客户端与服务器之间的交互,保存和记忆每个用户的身份和信息。
几个疑问
- 我先访问A页面后访问B页面,HTTP无法知道是不是同一个人访问
- 为什么京东它知道我曾经浏览过哪些商品
- 为什么别人可以看到我的网页浏览记录
二、会话跟踪技术
1、使用隐藏表单域
<input type="hidden" name="checkid" value="AK47">
2、借助URL参数
原始URL:http://www.aipanshi.com/show.php
用添加的参数重写的URL:
http://www.aipanshi.com/show.php?id=1002
原始URL:http://www.aipanshi.com/userinfo.php
用添加的参数重写的URL:
http://www.aipanshi.com/userinfo.php?uid=1000
3、Cookie
4、Session
三、会话跟踪技术之COOKIE
1、什么是cookie(小甜品)
-
cookie 是HTTP协议下,服务器或脚本可以维护客户信息的一种方式
-
用户在浏览器上的一个很小的文本文件。【常用来记忆 用户名、密码、个性化设置、个人偏好记录等等】
- cookie 保存在客户端(用户浏览器),可以手动删除。如果浏览器上的cookie太多,超过了系统所允许的范围,浏览器会自动删除。
2、cookie的工作原理
存储cookie
是浏览器提供的功能。cookie
其实是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个 cookie 文件夹来存放各个域下设置的cookie
当浏览器不禁用cookies的时候,浏览器每一次的WEB请求,都会自动读取cookies数据发送给服务器。
另一种说法:cookies是服务器保存在客户端上的数据,用来标识用户.
3、生成一个cookie
-
3.1 通过setcookie()函数
setcookie('名字','值','有效期','路径','域名','是否安全'); 名字: 取的名字(必须) 值: 存的什么(必须) 有效期: 在多长时间内可以访问(必须),默认浏览器关闭即失效 路径: 可以进哪个文件夹 默认是当前访问的文件夹 注意'/'是根目录 域名: 相当于区域 安全: 默认是false如果是使用https协议,就将这一项改为true
例子
# 默认创建cookie在浏览器关闭后失效 setcookie('name','jack');q # 有效时间1个小时 setcookie("english-name",'Jack',time()+3600); # 在目录session下创建cookie默认的作用域是/session,非/session目录访问不了 setcookie("english-name",'Jack',time()+3600,'/'); //有效时间1个小时,整个域名下有效,一级域名下有效 setcookie("english-name-test",'Jack-test',time()+3600,'/','study.com'); //数组方式 setcookie('name[0]','jack'); setcookie('name[1]','jack100'); // 也可以先序列化再存储 $arr = ['jack','jack2']; setcookie('arr-name',serialize($arr));
- 3.1 通过header()函数
header("Set-Cookie:course=PHP;path=/;");
4、访问cookie
var_dump($_COOKIE["cookiename"]);
5、删除一个cookie
# 第一种方法
setcookie("cookieName","Value",time()-1);
# 第二种方法
setcookie("cookieName");
5、cookie存放位置
# chrome
C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Chrome\User Data\Default
下面有个cookie文件,有时候找不到对用的文件夹,可能是系统默认隐藏
# Firefox
C:\Users\Administrator\AppData\Local\Mozilla\Firefox\Profiles\pmfhbcqs.default\OfflineCache
每个浏览器都有自己的cookies文件,每个浏览器也只能读写自己的cookies数据,并且具体的读写处理也不一样。 举个例子,chrome的所有cookies数据是存放在一个文件中的,并且做了加密处理,所以chrome写cookies时会加密,读cookies会解密,如果你用文本处理工具打开chorme的cookies会发现乱码看不懂,就是因为chrome加密了不让你看,只有它自己懂
6、cookie注意事项
-
setcookie()
函数之前不能有任何html输出,空白都不行。同header() -
通过
setcookie()
函数生成cookie,打印$_COOKIE['name']
,不能获取对应的值.必须刷新或在其他页面获取。 -
不同浏览器对cookie处理不同。客户端可以禁用cookie,浏览器也会限制cookie的数量。
一个浏览器能创建的cookie数量最多为300个,并且每个不能超过4KB,每个WEB站点能设置的cookie总数不能超过20个
-
cookie是保存在客户端。用户可以禁用或删除,所以不能过分依赖cookie。
- 不要使用过多,影响网站性能(文件读写)