Сериализация $ _SESSION и сохранение его в таблице mySQL - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь сохранить сеанс в базе данных.Я могу сериализовать его и вставить в поле 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 Ответ

1 голос
/ 19 марта 2012

вы можете использовать JSON вместо сериализации (глубокий уровень гарантирован)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...