2013-04-03 61 views
0

我运行的网站有许多不同的子域。我们正在推出一个使用主域的子域的新下载服务器。我们通常检查用户信息的方式是使用跨子域cookie等,但我知道这不会工作,因为他们的不同的服务器,我想知道什么是检查用户是否登录等主要服务器上的最佳方式。跨子域和服务器的Cookie - PHP和Apache2

我所想要做的是以下

Sub1.domain.tld =主服务器

当你要下载一个文件,它会指向你到相应的服务器中的文件存储在哪里

Sub2.domain.tld =下载服务器

有什么办法,以保持或检查如果用户登录请。

我们通常使用cookie翻过子域做到这一点的方法是

setcookie('LoginVariable1', $LoginVariable1, $expiretime, '/', '.domain.tld'); 
setcookie('LoginVariable2', $LoginVariable2, $expiretime, '/', '.domain.tld'); 
+0

例如,最好的方法是通过数据库或memcache共享服务器之间的会话。 – Maerlyn 2013-04-03 22:34:18

+0

不应该在服务器之间更改Cookie吗?除非你的意思是会话cookie – jchapa 2013-04-03 22:35:13

+0

Cookie只要是为顶级域定义的,就存储在客户端上,您应该可以访问它们。当然,您可能使用的是由主服务器动态创建的会话UID。您可以在主服务器上公开一个服务来检查sessionID cookie是否有效,并从下载服务器调用它。 – NSjonas 2013-04-03 22:38:37

回答

0

跨域的cookie会正好在你的情况下工作。如果您有“www.somedomain.example”和“download.someotherdomain.example”,那么他们不会工作的唯一情况是,因为您无法将顶层域“示例”中的cookie定义为跨域。

因此,这可以归结为一个cookie告诉所有服务器像用户的会话ID或登录时获得的身份验证令牌,然后所有服务器都必须询问一些中央身份验证服务此会话或令牌是当前登录。

+0

当我们将cookies设置为.domain.tld时,以便任何子域也可以使用此功能,但在尝试从另一台服务器读取该cookie时看起来不起作用 – Christopher 2013-04-03 22:43:31

+0

“似乎不起作用”不是正确的错误分析。 'var_dump($ _ COOKIE)'的输出是什么?它是否包含您设置的cookie? – Sven 2013-04-03 22:51:56

0

如果子域映射到不同的服务器,您有两种方法,因为我看到它。

1)您可以将php会话的目录共享到服务器A和点服务器B上。

2)您可以使用数据库会话并将两台服务器连接到单个数据库以验证/检索会话。

在这两种情况下,最终都会有一个存储会话的中心位置。

+0

关于第1点:php不会在任何地方存储cookie,客户端的确如此。 – Maerlyn 2013-04-03 22:36:57

+0

请注意,在使用自己的代码时,您不应该忘记实施正确的会话锁定,否则事情将会中断。 – Sven 2013-04-03 22:36:59

+0

@Maerlyn我说过饼干并且很快就抓住了它。我的意思是服务器端会话文件通常存储在临时目录中。如果两台服务器共享该目录,那么理论上两台服务器都可以共享会话。 – 2013-04-03 22:38:26