欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php的会话控制

程序员文章站 2024-03-20 15:33:58
...

因为http是短连接,用户的每次访问的连接信息都不一样,为了解决这问题,我们需要引入一个标识来区分每次访问的用户,在php里可以用sessioncookie来完成这一操作。

先来了解下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 | 菜鸟教程