所以我终于设法将一些会话数据保存到数据库中。
现在出现了一个新问题。当我保存所有数据后加载页面。
当我重新加载页面并向会话写入内容时,会话中已有的所有数据都将被此新数据替换。这意味着每次加载时,所有数据都将被替换为新数据。这给我带来了问题,因为当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
序列化字符串是否有问题我不明白为什么它会给我这个错误。
在此先感谢,一些帮助将不胜感激。
答案 0 :(得分:0)
好的,现在一切正常。说出问题是什么,我感到很尴尬。好的问题和解决方案。
问题在于会话序列化数据对数据库中的常规文本字段很长。我的字符串超过500.000个字符,数据库中的常规文本字段支持65.000+个字符。
所以我将字段从“TEXT”更改为“LONGTEXT”,现在它有足够的空间来保存字符串。现在一切正常。
到目前为止,大家都感谢你的时间。