반응형
Python PHP 세션 직렬화 해제
나는 PHP 세션 데이터를 파이썬에서 와 모듈(에서 가져온 것)을 사용하여 비활성화하려고 노력해 왔지만, 나에게는 불가능해 보인다.
두 모듈 모두 PHP 세션 데이터가 다음과 같을 것으로 예상한다:
a:2:{s:3:"Usr";s:5:"AxL11";s:2:"Id";s:1:"2";}
그러나 세션 파일에 저장된 데이터는 다음과 같습니다:
Id|s:1:"2";Usr|s:5:"AxL11";
어떤 도움이든 대단히 감사합니다.
구글에서 3페이지에 도달한 후, 나는 내가 제공한 문자열과 함께 작동하는 원래 응용프로그램의 a를 발견했다:
>>> loads('Id|s:1:"2";Usr|s:5:"AxL11";')
{'Id': '2', 'Usr': 'AxL11'}
PHP 직렬화에 사용되는 기본 알고리즘은 에 의해 사용되는 알고리즘이지만, 내부 형식은 로 불린다
숫자 인덱스를 저장할 수 없거나 문자열 인덱스에 특수 문자( 및 )가 포함되어 있습니다
올바른 해결책은 Armin Ronacher의 원본 라이브러리가 지원하는 라이브러리로, 심지어 INI 설정을 변경하여 JSON으로 직렬화 및 역직렬화하는 것입니다.
나는 PHP 측면에서 최대한의 호환성을 위해 전자를 사용하기로 결정했다
ini_set('session.serialize_handler', 'php_serialize')
따라서 새 세션이 표준과 호환됩니다.
내가 바보 같은 방법으로 하는 거야:
먼저 쿼리 문자열로 변환한 후 다음을 사용합니다:
import sys
import re
if sys.version_info >= (3, 0):
from urllib.parse import parse_qs, quote
else:
from urlparse import parse_qs
from urllib import quote
def parse_php_session(path):
with open(path, 'r') as sess:
return parse_qs(
re.sub(r'\|s:([0-9]+):"?(.*?)(?=[^;|]+\|s:[0-9]+:|$)',
lambda m : '=' + quote(m.group(2)[:int(m.group(1))]) + '&',
sess.read().rstrip().rstrip(';') + ';')
)
print(parse_php_session('/session-save-path/sess_0123456789abcdef'))
# {'Id': ['2'], 'Usr': ['AxL11']}
이전에는 로 교체하지 않고 작동했습니다(둘 다 허용됨). 그러나 Python 3.10 이후의 기본 구분자는
반응형
'개발하자' 카테고리의 다른 글
| 파이썬에서 .lnk 파일의 대상을 읽습니까? (0) | 2023.02.21 |
|---|---|
| 파이썬의 opencv에서 "QObject::moveToThread:" 오류를 수정하는 방법은 무엇입니까? (0) | 2023.02.21 |
| POST 요청을 수행하는 동안 플러터 인증서_VERIFIY_FAILED 오류를 해결하는 방법은 무엇입니까? (0) | 2023.02.19 |
| 수평으로 스크롤할 수 있으며 스냅 효과가 있는 카드(스냅 효과 포함) (0) | 2023.02.19 |
| 유형 스크립트: 익스프레스 연장.자체 클래스가 있는 세션 인터페이스 (0) | 2023.02.18 |