简体   繁体   English

如何在同一个域上共享Django和PHP之间的会话数据

[英]How to share session data between Django and PHP on the same domain

I have a Django application that logs users in and out using the standard Django auth system. 我有一个Django应用程序,使用标准的Django auth系统登录和退出用户。 The app also uses sessions which are stored in the Django database (db storage is also the Django default). 该应用程序还使用存储在Django数据库中的会话(数据库存储也是Django默认值)。

So far, so good, but: 到目前为止,这么好,但是:

On the same domain I have a large collection of php pages running on apache. 在同一个域上,我有一大堆在apache上运行的php页面。 I want to be able to log in via my Django application and have django initiate all my session variables and then when I click a link that takes me to a php section I want to be able to access the session variables I created in Django in php. 我希望能够通过我的Django应用程序登录并让django启动我所有的会话变量然后当我点击一个链接,带我到一个PHP部分,我希望能够访问我在php中创建的Django会话变量。

What is my best option for sharing the session? 分享会话的最佳选择是什么?

(If it makes any difference PHP is not editing the session, only using the variables) (如果它没有任何区别PHP不编辑会话,只使用变量)

You can implement your own Custom Session Handler in PHP. 您可以在PHP中实现自己的自定义会话处理程序 Connect to the database you store the session data from the Django database and those data will be transparently offered in PHP as the session values then. 连接到存储来自Django数据库的会话数据的数据库,这些数据将在PHP中透明地作为会话值提供。

A benefit of the custom session handler is as well, that you can make that session in PHP write protected, you just drop any changes. 自定义会话处理程序的一个好处是,您可以使PHP中的该会话写保护,您只需删除任何更改。

Next to that you need to share the session id , it is connected to the session name . 接下来,您需要共享会话ID ,它连接到会话名称 I do not know Django well, but I guess there is something comparable, so if you make it compatible cookies or URL-parameters might even work instantly. 我不太了解Django,但我猜有一些类似的东西,所以如果你使它兼容cookie或URL参数甚至可以立即工作。

SUCCESS!! 成功!! (of a kind). (一种) Its a little hacked together but I managed to get it working. 它有点被黑了,但我设法让它工作。

Rather then trying to rewrite django_php_bridge db.py file to use the new version of phpserialise (1.2), 而不是尝试重写django_php_bridge db.py文件以使用新版本的phpserialise(1.2),

I used to old version with a couple of my own custom adjustments. 我曾经使用过几个自己的自定义调整旧版本。 Most importantly I had to add an extra if statement to the serialize function to convert a unicode string but apart from that I just followed the instructions djang_php_bridge docs file (remembering to set the SESSION_COOKIE_NAME field in the django settings file), and it worked straight away. 最重要的是,我必须在serialize函数中添加一个额外的if语句来转换unicode字符串,但除此之外我只是按照说明djang_php_bridge docs文件(记得在django设置文件中设置SESSION_COOKIE_NAME字段),它立即起作用。

At some point when I have more time I will have a go at re-writing the django_php_bridge to use the new latest phpserialize version, but for now I am just happy to have a successful out come. 在某些时候,当我有更多的时间,我将重新编写django_php_bridge以使用新的最新的phpserialize版本,但是现在我很高兴有一个成功的出来。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM