PHP에서 Zend Framework 2의 세션 관리자로 작업 중이며 세션 데이터를 직렬화 해제하여 데이터 저장 방법을 변경할 수 있습니다. 나는 정규식이 그것을 할 수있는 방법이라고 생각했지만 정규 표현식이이 유형의 문자열에 적합한 지 확인하는 방법을 알 수 없다.문자열 내에서 PHP 직렬 데이터를 일치시키는 Regex
샘플 입력 :
__ZF|a:2:{s:20:"_REQUEST_ACCESS_TIME";d:1099999999.9999999999999999999999;s:6:"_VALID";a:1:{s:25:"Zend\Session\Validator\Id";s:26:"xxxxxxxxxxxxxxxxxxxxxxxxxx";}}initialized|C:23:"Zend\Stdlib\ArrayObject":403:{a:4:{s:7:"storage";a:3:{s:4:"init";i:1;s:10:"remoteAddr";s:13:"127.000.00.01";s:13:"httpUserAgent";s:114:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";}s:4:"flag";i:2;s:13:"iteratorClass";s:13:"ArrayIterator";s:19:"protectedProperties";a:4:{i:0;s:7:"storage";i:1;s:4:"flag";i:2;s:13:"iteratorClass";i:3;s:19:"protectedProperties";}}}
예상 출력 :
'__ZF|a:2:{s:20:"_REQUEST_ACCESS_TIME";d:1099999999.9999999999999999999999;s:6:"_VALID";a:1:{s:25:"Zend\Session\Validator\Id";s:26:"xxxxxxxxxxxxxxxxxxxxxxxxxx";}}'
'initialized|C:23:"Zend\Stdlib\ArrayObject":403:{a:4:{s:7:"storage";a:3:{s:4:"init";i:1;s:10:"remoteAddr";s:13:"127.000.00.01";s:13:"httpUserAgent";s:114:"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";}s:4:"flag";i:2;s:13:"iteratorClass";s:13:"ArrayIterator";s:19:"protectedProperties";a:4:{i:0;s:7:"storage";i:1;s:4:"flag";i:2;s:13:"iteratorClass";i:3;s:19:"protectedProperties";}}}'
내가 뭘하려 :
내가 붙어$pattern = '/\w+\|.*?}}+/'; // this works for the sample input, but may be too general and certainly won't work for serialized data without a nested array
$pattern = '/\w+\|(a:\d+:{.*?}|o:\d+:\"[a-z0-9_]+\":\d+:{.*?})/'; // doesn't capture the `initialized` data
:
은 일반적으로 말하면, 내가 수 ' 가장 좋은 길을 찾아 내라. initialized
데이터의 __ZF
데이터를 분리합니다 (특히 세션에 다른 비 Zend 변수가있는 경우). 특히, 직렬화 된 데이터를 가져 오기 위해 사용할 정규식을 파악할 수 없습니다.
RegexPlanet에 예제를 넣으려고했으나 인터페이스를 알아 내지 못했으며 기괴한 결과 만 나타났습니다.
$text = "";
foreach ($_SESSION as $key => $value) {
$text .= $key . "|" . serialize($value);
}
을 ...하지만 그 소스 코드를 발견하지 않았습니다 : 도움이된다면, 나는 꽤 확실
ZF
PHP는 다음과 같이 직렬화 된 세션 데이터를 생성입니다.
직렬화시 JSON 형식으로 작업하는 것처럼 보입니다. Regex의 문제를 공격하는 대신 JSON을 사용하려고 시도 했습니까?! –
@RodrigoGomes 이것이 JSON이라는 것을 알지 못했습니다. 하지만 JSON은 특정 형식 지정 스타일에 대한 단어 일뿐입니다. 특히, 올바르게 이해한다면 분리하려는 데이터 부분은 JSON이 아닙니다. JSON은 어떻게 사용합니까? – Miryafa
가장 좋은 방법은 [session_decode] (http://php.net/manual/en/function.session-decode.php#113523)와 관련된 것일 수 있습니다. – melpomene