序列化$ _SESSION并将其存储在mySQL表中

时间:2012-03-19 16:17:13

标签: php serialization

我正在尝试将会话存储在数据库中。我可以序列化它并将其插入表中的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吗?我很难过,不确定哪个阶段我错了。

1 个答案:

答案 0 :(得分:1)

您可以使用JSON而不是序列化(深层次保证)

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