在 PHP 中设置会话超时
-
在 PHP 中使用
session_unset()
和session_destroy()
函数设置会话超时 -
在 PHP 中使用
unset()
函数设置会话超时 -
在 PHP 中使用
session_regenerate_id()
函数更改当前会话 ID
本文将介绍一种在 PHP 中使用 session_unset()
和 session_destroy()
函数销毁会话的方法。我们将在 30 分钟后销毁会话。它检查从最后一个活动到当前时间的时间间隔以销毁会话。
我们还将演示使用 unset()
函数在 PHP 中设置会话超时的另一种方法。unset()
函数将会话变量作为参数。此方法使用数组来存储会话变量。
我们将介绍另一种使用 session_regenerate_id()
函数使当前会话 ID 无效的方法。该函数为当前会话生成一个新的会话 ID,破坏先前的会话 ID。
在 PHP 中使用 session_unset()
和 session_destroy()
函数设置会话超时
我们可以使用 session_unset()
函数在运行时取消设置 $_SESSION
变量,并使用 session_destroy()
函数从存储中销毁会话。time()
函数返回当前时间。我们可以使用 $_SESSION
变量来存储最后一个活动的时间戳。因此,我们可以通过计算从上次活动到当前时间的差异来检查时间。这样,我们检查一个会话的时间间隔。
例如,使用 session_start()
函数在服务器中启动会话。检查会话是否已使用 isset()
函数创建。使用 &&
运算符检查 isset()
函数内的其他条件。从 time()
函数中减去会话变量 start
并检查结果是否大于 1800。在 if
条件中使用 session_unset()
和 session_destroy()
。然后显示会话已被销毁的消息。在 if
条件之外,创建一个会话变量 $_SESSION['start']
并为其分配 time()
函数以更新会话。
if
条件失败,因为在下面的示例中尚未创建会话变量。当条件失败时将创建会话。如果用户没有向服务器发送请求,会话将在 30 分钟后过期。isset()
函数的后半部分检查会话的总活动时间。1800
表示 1800 秒,相当于 30 分钟。如果总活动时间超过 30 分钟,则 if 条件为真。然后,它会破坏会话。代码的输出对应于活动时间超过 30 分钟后被销毁的会话。查看 PHP 手册 以了解有关 session_unset()
函数的更多信息。
示例代码:
# php 7.*
<?php
session_start();
if (isset($_SESSION['start']) && (time() - $_SESSION['start'] > 1800)) {
session_unset();
session_destroy();
echo "session destroyed";
}
$_SESSION['start'] = time();
?>
输出:
session destroyed
在 PHP 中使用 unset()
函数设置会话超时
我们可以使用 unset()
函数来销毁 PHP 中特定会话变量的会话。该函数将 $_SESSION
变量作为参数。此方法将会话存储在一个数组中。我们可以使用关联数组来存储会话名称和会话开始时间。我们可以使用 time()
函数来获取当前时间。我们可以按照上面提到的方法检查会话时间间隔,从当前时间中减去活动会话时间。
例如,使用 session_start()
函数来启动会话。编写一个会话变量 $_SESSION['start']
并为其分配一个关联数组。写入键 0
和 registered
并为相应的键写入值 active
和 time()
。检查时间间隔是否大于 30 分钟。如果条件为真,则编写带有 $_SESSION['start']
作为参数的 unset()
函数。然后,显示消息 session destroyed
。在 if
条件块之外,使用 time()
函数更新会话变量 $_SESSION['start']
。
在下面的示例中,数组包含会话变量。会话变量的值为 active
。time()
函数在数组中创建当前时间戳,键 registered
保存该值。请查看 PHP 手册 以了解有关 $_SESSION
超全局变量的更多信息。
示例代码:
#php 7.x
<?php
session_start();
$_SESSION['start'] = array(0=> 'active', 'registered' => time())
if ((time() - $_SESSION['start']['registered']) > (60 * 30)) {
unset($_SESSION['start']);
echo "session destroyed";
}
$_SESSION['start'] = time();
?>
输出:
session destroyed
在 PHP 中使用 session_regenerate_id()
函数更改当前会话 ID
我们可以使用 session_regenerate_id()
函数来更改当前会话的会话 ID。通过这种方式,我们可以防止我们的脚本会话固定。函数中的布尔值 true
可以生成新的 session-id。在这个方法中,我们可以在重新生成会话 id 之前和之后使用 session_id()
函数打印会话 id。但是会话不会随着 session-id 的变化而过期。它只要求用户再次登录。因此,它可以防止会话固定。
例如,使用 session_id()
函数启动会话。使用 session_id()
函数显示当前会话 ID。检查会话是否已创建并创建会话 $_SESSION['start']
并分配 time()
函数。找到会话处于活动状态的时间间隔,就像我们在上述方法中所做的那样。如果条件为真,则使用 session_regenerate_id(true)
函数。更新会话变量。在脚本的末尾,使用 session_id()
函数打印新的会话 ID。
示例代码:
#php 7.x
<?php
session_start();
print("Old: ".session_id());
echo "<br>";
if (!isset($_SESSION['start'])) {
$_SESSION['start'] = time();
} else if (time() - $_SESSION['start'] > 1800) {
session_regenerate_id(true);
$_SESSION['start'] = time();
}
print("Now: ".session_id());
?>
输出:
Old: t38kssej37un38mtsoa6lovh05
Now: mak7i3in708c6rl2udd8gbfo3r
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn