Как я могу в django получить сеанс, созданный в php? - PullRequest
3 голосов
/ 17 января 2012

Это не междоменный.мой сайт состоит из php и django, я пишу сеанс на php, но я хочу прочитать его на django, как я могу это сделать ??

1 Ответ

5 голосов
/ 17 января 2012

Во-первых, поймите , как работают сеансы 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.

Отказ от ответственности: все это основано на исследованиях;Я сам не пробовал, поэтому приветствуются изменения и комментарии, и, как всегда, причины любых отрицательных голосов очень приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...