Sha*_*ang 3 php django session
它不是跨域的.我的网站由php和django组成,我在php中编写会话,但我想在django中读取它,我该怎么做?
首先,了解PHP会话的工作原理.
要从Django访问PHP的会话数据,您需要会话ID,并且您需要访问存储会话数据的任何位置.
要获取会话ID,请从cookie中检索它; cookie名称应设置为PHP session.name设置的值.在Django中,您可以使用cookie从cookie中获取会话ID 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()以便你知道哪些文件对应哪个会话ID.
一旦知道哪个会话数据对应于每个会话ID,就可以使用python标准库函数从文件加载和保存数据.不幸的是,我找不到一种简洁的方法来解析PHP的标准会话序列化格式(由定义session.serialize_handler),因为它与我所知道的任何标准格式都不匹配,但格式看起来并不太复杂.
例如,基于此讨论,如果pr($_SESSION);给出
Array
(
[Config] => Array
(
[rand] => 1482441247
[time] => 1179248446
[userAgent] => cc98eaffc23c634e0efd75ab9e36e810
)
)
Run Code Online (Sandbox Code Playgroud)
然后会话内容是
Config|a:3:{s:4:"rand";i:1482441247;s:4:"time";i:1179247983;s:
9:"userAgent";s:32:"cc98eaffc23c634e0efd75ab9e36e810";}
Run Code Online (Sandbox Code Playgroud)
您可以看到,它表示存在一个名为Configarray length 3 的变量,并且数组内容由以下内容组成:
rand的整数的键1482441247time的整数的键1179247983userAgent的字符串,其值为长度为32且带值的字符串的键cc98eaffc23c634e0efd75ab9e36e810所以通过一些实验你应该能够编写一个小python模块来获取cookie数据并将其转换为包含dicts和其他标准python数据对象的python列表.
免责声明:这完全基于研究; 我自己没有尝试过这样的编辑和评论是受欢迎的,并且一如既往,非常感谢任何downvotes的原因.
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |