PHP Session
HTTP是无状态的协议,它没有一个内建机制来保存两个请求之间的状态。当一个用户在请求一个页面后在请求另外一个页面,HTTP将无法告诉我们这两个请求是来自同一个用户。
session是一种利用cookie来实现在服务端存储用户数据以识别用户的机制。
启动Session
在使用session功能前,必须启动一个session,PHP提供了两种方法:
方法一:手动调用session_start()函数
<?php session_start();
session_start()函数会检查是否已经有一个session ID。如果有,将其载入使用;如果没有,就创建一个并使其能通过超级全局变量$_SESSION进行访问。
方法二:配置PHP成当有用户访问时自动启动session
修改php.ini文件的选项session.auto_start=1。
设置Session变量
当session启动后,可以使用超级全局变量$_SESSION设置session变量。
<?php session_start(); $_SESSION['user'] = 'newbie';
session变量只有在session结束或者手动重置时才会失效,PHP垃圾回收机制会根据php.ini文件session.gc_maxlifetime选项的值(单位为秒)来回收session变量。
访问Session变量
当session启动后,可以使用超级全局变量$_SESSION访问session变量。
<?php session_start(); $user = $_SESSION['user']; var_dump($user); // 输出string(6) "newbie"
销毁Session变量
当不需要一个session变量时,我们可以使用unset()函数将其销毁。
<?php unset($_SESSION['user']); // unset($_SESSION); 不能这么做
注意:不能销毁整个$_SESSION数组,这样会禁用session功能。
如果要一次销毁所有session变量,可以把$_SESSION重置为一个空数组。
<?php $_SESSION = [];
销毁Session
使用完session后(例如用户登出),应该销毁session的所有变量,然后调用session_destroy()函数来清除session ID。
<?php $_SESSION = []; session_destroy();