因为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 | 菜鸟教程
本文深入探讨了PHP中Session和Cookie的工作原理及应用。详细解释了Cookie作为客户端存储的特殊文件,如何通过名称、值、有效期和作用域进行管理。同时,介绍了如何使用setcookie()函数设置和删除Cookie。此外,还解析了Session的概念,如何通过session_start()启动会话,以及$_SESSION全局变量的使用,最后提到了Session和Cookie的区别。
1862

被折叠的 条评论
为什么被折叠?



