zoukankan      html  css  js  c++  java
  • 序列化serialize与反序列化unserialize

    有利于存储和传递value(除了resource类型外),却不会丢失其原有类型和结构。

    serialize序列化时会调用魔术方法__sleep();

    unserialize反序列化时会调用魔术方法__wakeup();

    序列化 数组:

    $arr = ['name'=>'Tony','age'=>29,'sex'=>'male'];
    $s = serialize($arr);
    echo '序列化数组:';
    var_dump($s);
    echo '反序列化数组:';
    var_dump(unserialize($s));

      输出

    E:Projectselfdemoserializedemo.php:8:string 'a:3:{s:4:"name";s:4:"Tony";s:3:"age";i:29;s:3:"sex";s:4:"male";}' (length=64)
    反序列化数组:
    E:Projectselfdemoserializedemo.php:10:
    array (size=3)
      'name' => string 'Tony' (length=4)
      'age' => int 29
      'sex' => string 'male' (length=4)

    序列化对象:

    新建一个对象:

    class A{
        public $one = 1;
        public function show_one(){
            echo $this->one;
        }
    }
    require_once('class_a.php');
    $s = serialize(new A);
    //把变量$s保存起来以便其他地方能够读取到
    file_put_contents('store', $s);
    require_once('class_a.php');
    $s = file_get_contents('store');
    $a = unserialize($s);
    var_dump($s);
    var_dump($a);
    //现在使用对象$a里面的函数
    $a->show_one();

      输出

    E:Projectselfdemoserializedemo.php:18:string 'O:1:"A":1:{s:3:"one";i:1;}' (length=26)
    E:Projectselfdemoserializedemo.php:19:
    object(A)[1]
      public 'one' => int 1
    1

    危害与防御:

    当用户对于反序列化的参数是可控的,利用__toString等是很容易造成意想不到的危害,所以最好在参数外面再套一层,例如json_decode。

     https://www.jb51.net/article/107110.htm

  • 相关阅读:
    Colidity-- NumberOfDiscIntersections
    Colidity--Triangle
    Colidity--CountDiv
    Colidity--MinAvgTwoSlice
    Colidity--GenomicRangeQuery
    Colidity--PassingCars
    操作系统--内存管理方式
    蓝桥杯练习系统—算法训练 P1102
    蓝桥杯练习系统—基础练习 完美的代价
    2n皇后问题
  • 原文地址:https://www.cnblogs.com/two-bees/p/10606134.html
Copyright © 2011-2022 走看看