PHP Session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。
但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。
不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie
中,亦或通过 URL 进行传导。 在PHP中,UID存储在cookie中。
1.操作SESSION变量
操作 $_SESSION 预定义超全局数组变量就可以看作操作普通数组变量一样。
<?php
//开启session机制
session_start();
//增
$_SESSION['sess_xx'] = 'xxx';
$_SESSION['sess_yy'] = 'yyy';
//删
unset($_SESSION['sess_xx']);
//改
$_SESSION['sess_yy'] = 'newyy';
//查
var_dump($_SESSION);
?>
SESSION的有效期是一个会话周期。
SESSION的有效路径默认的就是整站有效
SESSION的有效域是当前子域。
session数据的所有特征,基本上都是由浏览器上的cookie中所存储的PHPSESSID这个cookie变量所导致的。
所以,修改SESSION的属性,最主要的就是修cookie中PHPSESSID这个变量的属性。
2.SESSION属性的修改
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] );
session_set_cookie_params(有效期,有效路径,有效域,是否仅安全传输,是否仅HTTPONLY)
注意:如果要通过函数修改 cookie 参数,需要对每个请求都要 在调用 session_start() 函数之前调用 session_set_cookie_params() 函数。
我们一般只设置前三个属性。
session数据可以是除了资源型之外的其他的任意类型。
$_SESSION数组元素的下标仅仅支持字符串类型(支持关联型数组)
3.SESSION数据的删除与销毁有三个层次
1. 删除$_SESSION其中的某个元素 unset($_SESSION['name']);
2. 清空整个$_SESSION的数据 $_SESSION = array();
3. 销毁会话数据区: session_destroy();
4.SESSION变量与会话数据区之间的交互
<?php
//开启session机制
session_start();
//程序运行中
$_SESSION['sess_name'] = 'value';
?>
以上代码执行后,发生的交互过程如下:
为什么要在程序结束之前将$_SESSION的值写入到会话数据区呢?
因为当一个脚本结束的时候,整个脚本资源都销毁了,包括$_SESSION这个数组变量。
所以,要在整个脚本资源销毁之前将相关数据写入会话数据区(文件)中以实现数据的持久化存储。
//其他脚本访问会话数据区:
<?php session_start(); var_dump($_SESSION); ?>
其他脚本启用SESSION机制时,将从会话数据区读取数据并写入到$_SESSION变量当中。
第三次脚本执行时,销毁会话数据区:
<?php
session_start();
session_destroy();
$_SESSION['sess_name'] = 'newvalue';
var_dump($_SESSION);
?>
第三次脚本执行时,数据会话区被销毁。
故以后开启session机制,服务器会重新建立一个全新的数据会话区。
以上的SESSION机制内容整合来源于传智博客的PHP教学视频。博主对其中部分内容作了补充以及修改。