我有一个由2个应用程序组成的网站:
前端具有www域,而后端具有作业子域。例如,我的前端应用程序具有域www.example.com/*
,而我的后端具有job.example.com/*
。 我的前端应用程序可以位于一台服务器上,而后端可以位于另一台服务器上。或者它们都存储在同一台服务器上。
现在的问题是我存储在超级全局_Session(PHP)中的会话变量是否可以跨不同的子域工作。如果我在_Sesssion["SessionID"]
中设置www.example.com/*
,我可以从job.example.com/*
检索相同的_Sesssion [“SessionID”]吗?我是否需要进行特殊配置才能工作?
答案 0 :(得分:2)
要在多个域/服务器上使用相同的会话,您必须注意两个方面:
<强>存储强>
对于不同的服务器,您可以编写两台服务器都可以使用的session save handler。例如,这可以是一个都可以访问的数据库。
会话ID分享
如果要共享多个域的会话ID(可能位于同一服务器上或不同)并希望使用cookie来传输会话ID,则必须modify the session ID cookie settings以使cookie对两个域都有效。但这只有在两个域共享相同的更高级域时才有可能。对于共享www.example.com
的{{1}}和jobs.example.com
,example.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。您不需要编写自己的会话处理程序。