dateformats|a:1:{s:7:"phpdate";s:0:"";}
上面这句是session文件里面的内容。
格式为:变量名|类型:长度:值;
请问各位,怎么将第一行转成变量。
unserialize 无用,还有什么其它的办法没?

解决方案 »

  1.   

    $s = 'dateformats|a:1:{s:7:"phpdate";s:0:"";}';session_start(); //启用 session
    $old = $_SESSION; //保存原有的 session 变量
    $_SESSION = array(); //初始化
    session_decode($s); //解码
    list($new, $_SESSION) = array($_SESSION, $old); //取回
    print_r($new);
    当然,你也可以自己写个解码函数。很简单的
      

  2.   

    还是贴一个有用的函数。function formatSession($data)
    {
        if(  strlen( $data) == 0)
        {
            return array();
        }
        // match all the session keys and offsets
        preg_match_all('/(^|;|\})([a-zA-Z0-9_]+)\|/i', $data, $matchesarray, PREG_OFFSET_CAPTURE);
        $returnArray = array();
        $lastOffset = null;
        $currentKey = '';
        foreach ( $matchesarray[2] as $value )
        {
            $offset = $value[1];
            if(!is_null( $lastOffset))
            {
                $valueText = substr($data, $lastOffset, $offset - $lastOffset );
                $returnArray[$currentKey] = unserialize($valueText);
            }
            $currentKey = $value[0];         $lastOffset = $offset + strlen( $currentKey )+1;
        }
        $valueText = substr($data, $lastOffset );
        $returnArray[$currentKey] = unserialize($valueText);
        return $returnArray;
    }
      

  3.   

    不知道你这个函数对于复杂的 session 串是否能应付