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();