【问题标题】:Serializing the $_SESSION and storing it in a mySQL table序列化 $_SESSION 并将其存储在 mySQL 表中
【发布时间】:2012-03-19 16:17:12
【问题描述】:

我正在尝试将我的会话存储在数据库中。我可以将其序列化并将其插入到表中的 TEXT 字段中。我也可以将其拉回并“反序列化”它。我似乎无法将其恢复到我的会话中。

我基本上想从表中获取它,并用它替换我的 $_SESSION,这样会话的所有值都将再次可用,就像 $_SESSION['somevalue']。

我序列化它:

if(!empty($_POST)){
    unset($_POST['submit_x'],$_POST['submit_y'],$_POST['submit']);
    foreach ($_POST as $key=>$value) {
        $_SESSION[$key] = $value;
    }
    $serialized_data = serialize($_SESSION);
    setSession($userID,$serialized_data);
}

然后保存:

 function setSession($userID,$data){
    //is there a row?
    if(getSession($userID)){
        $sql = "UPDATE session_data SET session = '".mysql_real_escape_string($data)."' where user_id = ".$userID;
    }else{
        $sql = "INSERT into session_data VALUES('',".$userID.",'".mysql_real_escape_string($data)."')";
    }
    $result = mysql_query($sql) or die(mysql_error());

    return $result;
}

然后我来到需要用它替换我的 $_SESSION 的部分。

foreach(unserialize($serialized_data) as $key=>$value){
        $_SESSION[$key] = $value;
    }

我不能把它放到这样的 foreach 中吗?我很困惑,不确定我在哪个阶段出错了。

【问题讨论】:

  • 你记得session_start()吗?
  • 你绝对可以使用foreach--我认为问题出在其他地方!
  • 在数据库中存储会话数据有什么意义这样?为什么不一直使用 $_SESSION 数组呢?
  • 是的,会话正在运行。好的,很高兴知道我实际上可以使用 foreach。
  • 你的常识,我有我的理由,我希望用户几天后回来并从他离开的地方继续。

标签: php serialization


【解决方案1】:

您可以使用 JSON 代替序列化(保证深层次)

$dbstring = json_encode($_REQUEST); $_REQUEST = json_decode($dbstring, true);

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2014-06-18
    • 2015-02-18
    相关资源
    最近更新 更多