Во-первых, поймите , как работают сеансы PHP .
Чтобы получить доступ к данным сеанса PHP из Django, вам нужен идентификатор сеанса и вам нужен доступ везде, где хранятся данные сеанса.
Чтобы получить идентификатор сеанса, извлеките его из файла cookie;имя куки должно быть установлено в значение PHP session.name
.В Django вы можете получить идентификатор сеанса из cookie, используя request.COOKIES.get('<value of PHP's session.name setting>')
.Очевидно, что если вы не полагаетесь на файлы cookie для хранения данных сеанса, то для этого компонента вам потребуется другой подход.
Для доступа к данным все становится немного сложнее: вам нужно знать, гдеданные сеанса сохраняются (PHP по умолчанию хранит их в файлах) и способ преобразования их в значимые объекты Python.
Чтобы узнать, где хранятся данные, используйте PHP session_save_path()
функция для получения значения конфигурации session.save_path
.Если вы оцените это правильно, вы сможете получить каталог, в котором хранятся файлы сеанса.Однако, если файлы данных сеанса явно не основаны на session_ids (у меня нет удобной для проверки установки PHP), вы, вероятно, захотите написать свой SessionHandler
и зарегистрировать его вset_session_save_handler()
, чтобы вы знали, какие файлы соответствуют каким идентификаторам сеансов.
Как только вы узнаете, какие данные сеансов соответствуют каждому идентификатору сеанса, вы можете использовать стандартные функции библиотеки Python для загрузки и сохранения.данные в и из файлов.К сожалению, я не могу найти удобный способ разбора стандартного формата сериализации в PHP (как определено session.serialize_handler
), поскольку он не соответствует ни одному стандартному формату, о котором я знаю, но формат не 'выглядит слишком сложным.
Например, на основании этого обсуждения , если pr($_SESSION);
дает
Array
(
[Config] => Array
(
[rand] => 1482441247
[time] => 1179248446
[userAgent] => cc98eaffc23c634e0efd75ab9e36e810
)
)
, тогда содержимое сеанса
Config|a:3:{s:4:"rand";i:1482441247;s:4:"time";i:1179247983;s:
9:"userAgent";s:32:"cc98eaffc23c634e0efd75ab9e36e810";}
Вы можете видеть, что это говорит о том, что существует переменная с именем Config
, которая имеет тип массива длины 3, и содержимое массива состоит из:
- Строка длины 4 сзначение
rand
, которое является ключом для целого числа значения 1482441247
- Строка длины 4 со значением
time
, которое является ключом для целого числа значения 1179247983
- Stringдлиной 9 со значением
userAgent
, которое является ключом для строки длиной 32 со значением cc98eaffc23c634e0efd75ab9e36e810
, поэтому, немного поэкспериментировав, вы сможете написать небольшой модуль Python для приема cookieданные и преобразовать его в список Python, содержащий dicts и другие standard объекты данных Python.
Отказ от ответственности: все это основано на исследованиях;Я сам не пробовал, поэтому приветствуются изменения и комментарии, и, как всегда, причины любых отрицательных голосов очень приветствуются.