gpt4 book ai didi

php - 关闭 session 而不写入或销毁它

转载 作者:可可西里 更新时间:2023-11-01 00:44:28 27 4
gpt4 key购买 nike

有没有办法在不写入或破坏 PHP session 的情况下关闭它?我是不是遗漏了什么或者只有两个函数(session_write_close()session_destroy())将 session_status() 重置为 PHP_SESSION_NONE ?换句话说,如果我有一个打开的 session ,我可以在不影响外部 session 数据的情况下简单地关闭它,以便可以重新加载它。

最佳答案

您可以通过$_SESSION = null 来做到这一点。 session 不可用,但数据仍然存在(不会被删除)。

假设您在 session 中有数据:

<?php
session_start();
session_regenerate_id(); // get a fresh id
echo session_id();

$_SESSION['test'] = '12345';

print_r($_SESSION); // echoes the data in the session

数据:test|s:5:"12345";

然后在下一个请求中:

<?php
session_start();
echo session_id() . "<br>"; // echoes the same id as of the last request

$_SESSION = null;

print_r($_SESSION); // echoes nothing

echo "<br>";

echo session_status(); // echoes 2 (PHP_SESSION_ACTIVE)

数据还是一样:test|s:5:"12345";

(php-fpm 5.4.29,最新的 nginx,memcached 作为 session 处理程序)。

数据仍然可以通过 $_SESSION['whatever'] = ... 写入,但不能读取。我不确定这是否是一个好的解决方案,但我不得不承认我仍然不明白为什么或为什么需要这个。

作为替代方案,您可以使用属性 $this->active = true; 为 session 实现一个包装类;//或假:

class MySessionWrapper {
protected $active;
protected $data;
// getter setter for $this->active and $this->data ...

public function getData($var) {
if ($this->active !== true) {
throw new Exception('session disabled');
}
}
}

关于php - 关闭 session 而不写入或销毁它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com