我没有序列化

时间:2015-01-13 10:12:50

标签: php session serialization login

好吧,所以即时通讯制作一个(非常)基本的寄存器系统,它接受$ _POST数据的形式,制作它的$ _SESSION数据,然后我需要制作它以便它写入文件,但我需要能够稍后让会话结束,这样我就可以在有人登录时使用它们。
我的一位朋友告诉我,我应该序列化它,但我不知道该怎么做。我也是编程和stackoverflow的新手。

我的代码:

<?php session_start();

$_SESSION["naam"]            = $_POST["naam"];
$_SESSION["email"]           = $_POST["email"];
$_SESSION["woonplaats"]      = $_POST["woonplaats"];
$_SESSION["telefoon"]        = $_POST["telefoonnummer"];
$_SESSION["gebruikersnaam"]  = $_POST["gebruikersnaam"];
$_SESSION["wachtwoord"]      = $_POST["wachtwoord"];
$filename                        = "inloggegevens.txt";




$error = 0;


if (empty($_SESSION["naam"])) {
    echo "<pre>U moet een naam invullen\n</pre>";
    $error++;
    } else {
    $_SESSION["naam"];
    }


if (empty($_SESSION["email"])) {
    echo "<pre>U moet een email-adres invullen\n</pre>";
    $error++;
    } else {
    $_SESSION["email"];
    }


if (empty($_SESSION["woonplaats"])) {
    echo "<pre>U moet een woonplaats invullen\n</pre>";
    $error++;
    } else {
    $_SESSION["woonplaats"];
    }


if (empty($_SESSION["gebruikersnaam"])) {
    echo "<pre>U moet een gebruikersnaam invullen\n</pre>";
    $error++;
    } else {
    $_SESSION["gebruikersnaam"];
    }


if (empty($_SESSION["wachtwoord"])) {
    echo "<pre>U moet een wachtwoord invullen\n</pre>";
    $error++;
    } else {
    $_SESSION["wachtwoord"];
    }


if ($error == 0){

    if (is_writable($filename)) {
        echo "Fwrite succes";
        $fd = fopen($filename, "r+");
        fwrite($fd,$_SESSION["naam"]);
        fwrite($fd,$_SESSION["email"]);
        fwrite($fd,$_SESSION["woonplaats"]);
        fwrite($fd,$_SESSION["telefoonnummer"]);
        fwrite($fd,$_SESSION["gebruikersnaam"]);
        fwrite($fd,$_SESSION["wachtwoord."]);
        fclose($fd); 
    } else {
    echo "non de sjon.";
    } 
 }  
?>

1 个答案:

答案 0 :(得分:0)

序列化字符串或数组时,您将始终使用相同的格式:

键入:值并用分号分隔。

假设您要序列化“naam”和“email”:

$serializeArray = array(
    'naam' => $_SESSION["naam"],
    'email' => $_SESSION["email"]
);

$serialized = serialize($serializeArray);

输出:

print_r($serialized);
a:2:{s:4:"naam";s:3:"Max";s:5:"email";s:11:"test@ggg.de";}

你可以看到带有naam和电子邮件的数组现在是一个非常长的字符串。 “a”代表“数组”,“a”后面的2代表数组中的元素数。 在序列化数组中你有一些字符串(用小“s”表示。) 在此之后,有“4”这样的字符数。这会计算“naam”的字母。在此之后有字符串的内容。喜欢“naam”。然后分号为下一个元素,依此类推......

现在将$序列化存储在您的文件中。 在此之后,从文件中获取存储的序列化String并将其保存在$ serialized中。 然后反序列化它:

$unSerialized = unserialize($serialized);

输出:

print_r($unSerialized);
Array ( [naam] => Max [email] => test@ggg.de )

要点:

serialize(混合值)转换你的值(数组或对象或字符串或其他) 到一个非常长的字符串,其中包含序列化值中所有值的信息。 在对序列化字符串进行反序列化后,您将获得原始值。