我如何在django中获取在php中创建的会话?

它不是跨域的.
我的网站由PHPdjango组成,我在PHP中编写会话,但我想在django中读取它,我该怎么做?

解决方法:

首先,了解how PHP sessions work.

要从Django访问PHP的会话数据,您需要会话ID&您需要访问会话数据存储的任何位置.

获取会话ID,请从cookie中检索它; cookie名称应设置为PHPsession.name设置的值.在Django中,您可以使用request.COOKIES.get(‘< PHP的session.name设置>‘的值)从cookie中获取会话ID.显然,如果您不依赖cookie来维护会话数据,那么您需要为此组件采用不同的方法.

要访问数据,它会变得有点复杂:您需要知道会话数据的存储位置(PHP认将其存储在文件中)以及将其转换为有意义的python对象的方式.

要找出数据的存储位置,请使用PHPsession_save_path()函数获取数据的值
 session.save_path配置设置.如果您正确评估,您将能够获得存储会话文件的目录.但是,如果会话数据文件显然不是基于session_ids(我没有方便的PHP安装检查),那么你可能想编写自己的SessionHandler并将其注册set_session_save_handler()以便你知道哪些文件对应会话ID.

一旦知道哪个会话数据对应于每个会话ID,就可以使用python标准库函数来加载&将数据保存到&从文件.不幸的是,我找不到一种简洁的方法来解析PHP的标准会话序列化格式(由session.serialize_handler定义),因为它与我所知道的任何标准格式都不匹配,但格式看起来并不太复杂.

例如,基于this discussion,如果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的字符串,带有值时间,它是值为1179247983的整数的键
>长度为9的字符串,其值为userAgent,它是长度为32且值为cc98eaffc23c634e0efd75ab9e36e810的字符串的键

所以通过一些实验你应该能够编写一个python模块获取cookie数据并将其转换为包含dicts&的python列表.其他标准的python数据对象.

免责声明:这完全基于研究;我自己没有尝试这样编辑和编辑欢迎评论,并且一如既往,非常感谢任何downVotes的原因.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...