我需要在共享同一顶级域的不同子域上托管多个不同的服务,我想集中登录过程。
想法是:
site1.tld.com
site2.tld.com
site3.tld.com
siteX.tld.com
login.tld.com
并将用户重定向到login.tld.com
。然后,一旦记录,他们就可以访问这些服务。
PHP实现和保护的最佳方式是什么?
是否可以不存储本地cookie并保持会话开放?
添加更多详情
我需要用户在关闭浏览器后也能记住连接。我可以完全访问服务器,因此我可以根据需要配置php.ini
答案 0 :(得分:2)
如果您不想设置任何本地cookie,则需要坚持使用会话。跨子域进行会话的工作方式与仅在一个域上有所不同。让我们开始吧。
首先,我们需要为会话Cookie添加新的session_name()。我们需要这样做,因为在设置cookie参数之前必须定义会话名称。这会将旧会话名称存储在$old_name
下,并将会话名称更新为“some_name”:
$old_name = session_name("some_name");
接下来,我们必须使用session_set_cookie_params()设置会话Cookie参数。这是我们告诉服务器会话cookie将在哪里运行的地方:
session_set_cookie_params(0, '/', '.tld.com');
通过在第三个参数(域“tld.com”)前面加一个点,我们确保会话cookie在所有子域上都可见。作为替代方案,您还可以使用:
ini_set('session.cookie_domain', '.tld.com');
最后,我们需要使用session_start()在我们的脚本中开始或恢复我们的会话:
session_start();
总而言之,你应该在每个使用你的会话的脚本之上:
<?php
$old_name = session_name("some_name");
session_set_cookie_params(0, '/', '.tld.com');
//ini_set('session.cookie_domain', '.tld.com'); //Uncomment and comment above line if prefered.
session_start();
作为旁注,我应该包括在大多数共享主机提供商上不允许设置php.ini参数。此脚本假定您拥有对服务器的完全访问权限,或者至少是愿意让您更改这些设置的提供商。