自定义会话save_handler重写当前保存的数据库中的数据

时间:2016-07-25 12:21:16

标签: php database session save

所以我终于设法将一些会话数据保存到数据库中。 现在出现了一个新问题。当我保存所有数据后加载页面。 当我重新加载页面并向会话写入内容时,会话中已有的所有数据都将被此新数据替换。这意味着每次加载时,所有数据都将被替换为新数据。这给我带来了问题,因为当order_id中没有order_id时,我正在将session保存到会话中。

这是将数据写入数据库的代码。是的,它说替换成。但是因为这是一个自定义处理程序,我怎么能实际将数据附加到当前会话而不更新所有内容。另外,如何替换会话中已存在的新数据的旧数据。

处理写入数据库的代码。

    function _write($id, $data) {

        $access = time();
        $id = $this->session_db->real_escape_string($id);
        $access = $this->session_db->real_escape_string($access);
        $data = $this->session_db->real_escape_string($data);
        $sql = "REPLACE INTO sessions VALUES ('$id', '$access', '$data')";
        return $this->session_db->query($sql);
    }

我可以做些什么来将session_start()之后的所有数据直接放在会话变量中,这样它总是拥有所有数据,并且在我执行以下操作时不会用单个值覆盖数据:

$_SESSION['LAST_ACTIVITY'] = time(); ?

编辑:当我尝试在session_start();之后直接回应会话时 它给了我错误

Warning: session_start(): Failed to decode session object. Session has been destroyed in /var/www/vhosts/url/httpdocs/index.php on line 13

序列化字符串是否有问题我不明白为什么它会给我这个错误。

在此先感谢,一些帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,现在一切正常。说出问题是什么,我感到很尴尬。好的问题和解决方案。

问题在于会话序列化数据对数据库中的常规文本字段很长。我的字符串超过500.000个字符,数据库中的常规文本字段支持65.000+个字符。

所以我将字段从“TEXT”更改为“LONGTEXT”,现在它有足够的空间来保存字符串。现在一切正常。

到目前为止,大家都感谢你的时间。