首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“取消”会话保存处理程序?

如何“取消”会话保存处理程序?
EN

Stack Overflow用户
提问于 2014-01-27 09:14:36
回答 2查看 755关注 0票数 3

由于某些原因,我必须使用默认的保存处理程序初始化会话。

前面的代码使用session_set_save_handler()显式地设置自定义处理程序。

在我的情况下,更改以前的代码不是一个现实的选择,所以有人知道如何将处理程序恢复为默认的(例如,是否有session_restore_save_handler或session_unset_save_handler函数或等效函数)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-08 16:17:51

从PHP5.4开始,您可以通过直接实例化SessionHandler类来恢复到默认会话处理程序:

代码语言:javascript
复制
session_set_save_handler(new SessionHandler(), true);
票数 3
EN

Stack Overflow用户

发布于 2014-07-01 08:15:12

在这里,我必须回答我自己的问题,因为没有人说什么:

首先,PHP没有给出session_restore_save_handlersession_unset_save_handler,而且(到目前为止)还没有一种本地的方法来像以前那样把东西拿回来。出于某种原因,PHP团队没有给我们以这种方式处理会话处理程序的选项。

第二,本机会话机制可以通过以下代码进行仿真

代码语言:javascript
复制
class FileSessionHandler
{
    private $savePath;

    function open($savePath, $sessionName)
    {
        $this->savePath = $savePath;
        if (!is_dir($this->savePath)) {
            mkdir($this->savePath, 0777);
        }

        return true;
    }

    function close()
    {
        return true;
    }

    function read($id)
    {
        return (string)@file_get_contents("$this->savePath/sess_$id");
    }

    function write($id, $data)
    {
        return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
    }

    function destroy($id)
    {
        $file = "$this->savePath/sess_$id";
        if (file_exists($file)) {
            unlink($file);
        }

        return true;
    }

    function gc($maxlifetime)
    {
        foreach (glob("$this->savePath/sess_*") as $file) {
            if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
                unlink($file);
            }
        }

        return true;
    }
}

$handler = new FileSessionHandler();
session_set_save_handler(
    array($handler, 'open'),
    array($handler, 'close'),
    array($handler, 'read'),
    array($handler, 'write'),
    array($handler, 'destroy'),
    array($handler, 'gc')
    );

register_shutdown_function('session_write_close');

这个逻辑最接近PHP的本机会话处理一个会话,但当然,在不同的情况下处理不可预测的行为。我现在所能得出的结论是,基本的会话操作已经覆盖了全部内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21376892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档