php的会话控制
因为http是短连接,用户的每次访问的连接信息都不一样,为了解决这问题,我们需要引入一个标识来区分每次访问的用户,在php里可以用session
和cookie
来完成这一操作。
先来了解下cookie:
cookie是存在用户本地(一般指浏览器)的一种特殊文件,当用户访问服务器时会一并提交,其数据存放在HTTP数据包的协议头里,这里不做进一步了解。
普通情况下,用户本地是不存在任何cookie的,要先由服务器下发,才会存储到本地,
其属性有:名称、值、有效期、作用域(包括域名与路径)。
- 名称与值不用多说,类似程序里,变量与值的关系,
- 有效期也很好理解,在其失效前,访问时浏览器都会提交给服务器,
- 作用域是为了区分cookie的归属权,避免泄漏用户信息,这里不做太多了解。
在php里,服务器下发cookie是用setcookie
完成,以下是它的声明
setcookie(
$name,
$value = "",
$expire = 0,
$path = "",
$domain = "",
$secure = false,
$httponly = false
)
一般只用到前三个参数,即名称、值与过期时间,其中的过期时间是时间戳形式。
比如,服务器要下发一个名为a
的cookie,值为12345
,有效期为1小时(3600秒):
setcookie('a', '12345', time() + 3600);
下次用户再访问服务器的时候,就会把a
这个cookie提交上来,我们用$_COOKIE
这个全局数组变量可以获取到,即$_COOKIE['a']
如果想**删除cookie,也是用setcookie
完成,设置一个比当前时间小的$expire
**即可,比如time() - 3600
。
要注意的是,设置cookie前不能有任何输出内容。
再来看session
,它是基于cookie
,不同的是多了个本地存储cookies的过程。
使用session_start()
创建一个session,使用$_SESSION
获取当前创建的session
,并可以直接使用,有点像C++的map。
// 初始化或读取session
session_start();
// 如果每次的业务逻辑相同,可以用isset判断是否使用过
if(!isset($_SESSION['try']))
$_SESSION['try'] = 1;
else
$_SESSION['try']++;
echo "尝试次数:{$try}";
如果要删除session中的指定值,可以用unset
,即unset($_SESSION['try'])
,
或使用session_destory
删除session中的所有值,并回收这个session。
参考资料:
[1] PHP Session | 菜鸟教程
上一篇: 【EasyExcel】文件导出