我的主域名中存在登录页面。我想设置一些特定的子域名。
假设我的登录页面为example.com
成功登录后,我的页面将转到cms.example.com
或admin.example.com
。会话应该存储这三个example.com
,cms.example.com
和admin.example.com
而不是其他子域。
目前我的会话仅限example.com
,但我无法在2个以上的子域中获得任何会话。
我在Allow php sessions to carry over to subdomains |找到了一些相关的问题和答案Set session cookies for specific subdomains但是这是为所有域设置的。这是问题所在,因为我还有其他子域名,例如user.example.com
,studio.example.com
,demo.example.com
等。
如何为特定域和子域设置会话?
答案 0 :(得分:0)
会话无法转到子域。如果要将会话发送到2个不同的子域而不是其他子域,我建议使用cookie并将其设置为包含子域的特定文件夹。如果那不是你想要的,你可以为所有子域设置它:
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'], strpos($_SERVER['SERVER_NAME'],"."), 100));
答案 1 :(得分:0)
我假设您已经包含takes the domain and lops off the sub domain.的文件
我有类似的问题。我通过这个技巧解决了它。
在会话之前添加前缀,以区分子域的会话。
例如:$_Session["cms.id"], $_Session["admin.id"]
为包含域属性的会话和您要存储的其他信息创建一个类。
class CustomSessions{
private $domain;
private $userId;
/**
* @return mixed
*/
public function getDomain()
{
return $this->domain;
}
/**
* @param mixed $domain
*/
public function setDomain($domain)
{
$this->domain = $domain;
}
/**
* @return mixed
*/
public function getUserId()
{
return $this->userId;
}
/**
* @param mixed $userId
*/
public function setUserId($userId)
{
$this->userId = $userId;
}
}
现在,您可以创建CustomSession对象,并使用您希望该会话使用的域设置 $ domain 。
$obj = new CustomSession();
$obj->setDomain("cms.example.com");
然后,您可以在子域中检查$ domain的值,并相应地输入您的逻辑。
if($obj->getDomain()=='cms.example.com'){
// your code goes here
}