配置_Session以处理部署在多个服务器,不同子域上的应用程序

时间:2009-02-24 06:25:27

标签: php session

我有一个由2个应用程序组成的网站:

  1. 前端应用程序
  2. 后端应用程序
  3. 前端具有www域,而后端具有作业子域。例如,我的前端应用程序具有域www.example.com/*,而我的后端具有job.example.com/*我的前端应用程序可以位于一台服务器上,而后端可以位于另一台服务器上。或者它们都存储在同一台服务器上。

    现在的问题是我存储在超级全局_Session(PHP)中的会话变量是否可以跨不同的子域工作。如果我在_Sesssion["SessionID"]中设置www.example.com/*,我可以从job.example.com/*检索相同的_Sesssion [“SessionID”]吗?我是否需要进行特殊配置才能工作?

5 个答案:

答案 0 :(得分:2)

要在多个域/服务器上使用相同的会话,您必须注意两个方面:

  • 存储会话数据,以便两个域/服务器都可以访问它,
  • 会话标识符如何沿两个域/服务器传送,以便。

<强>存储
对于不同的服务器,您可以编写两台服务器都可以使用的session save handler。例如,这可以是一个都可以访问的数据库。

会话ID分享
如果要共享多个域的会话ID(可能位于同一服务器上或不同)并希望使用cookie来传输会话ID,则必须modify the session ID cookie settings以使cookie对两个域都有效。但这只有在两个域共享相同的更高级域时才有可能。对于共享www.example.com的{​​{1}}和jobs.example.comexample.com的{​​{1}}参数必须设置为$domain

答案 1 :(得分:0)

会话数据保存在session_save_path函数给出的路径中,因此您需要使两个应用程序都可以访问该目录。如果它们位于同一台服务器上,您可能不需要做任何事情,但如果它们位于不同的服务器上,您将不得不使用某种类型的网络文件系统(如NFS)并安装它以使会话保存路径在两个服务器的网络文件系统上。

答案 2 :(得分:0)

您可以编写自己的会话处理程序,将会话数据保存到数据库,然后您可以从任何有权访问该数据库的服务器访问该数据库。

答案 3 :(得分:0)

编写自己的会话处理程序:http://de.php.net/manual/en/function.session-set-save-handler.php

使用中央数据库或内存缓存服务器。

答案 4 :(得分:0)

子域只会影响您的Cookie,必须正确设置(在域范围内)才能通过从www。*导航到作业来保持会话ID。*。

对于会话持久性,您可以使用memcache服务器并使用php_memcache session handler。您不需要编写自己的会话处理程序。