Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中为特定子域设置会话?_Php_Apache_.htaccess_Session_Cookies - Fatal编程技术网

如何在PHP中为特定子域设置会话?

如何在PHP中为特定子域设置会话?,php,apache,.htaccess,session,cookies,Php,Apache,.htaccess,Session,Cookies,我有一个登录页面,它存在于我的主域中。我想将会话设置为某个特定的子域 假设我的登录页面是example.com,成功登录后,我的页面将转到cms.example.com或admin.example.com。会话应该存储这三个example.com,cms.example.com和admin.example.com而不是其他子域 目前我只获得了我的example.com会话,但我无法在上述2个子域中获得任何会话 我在这里找到了一些相关的问题和答案|但这是为所有域设置的。这是一个问题,因为我还有一些

我有一个登录页面,它存在于我的主域中。我想将会话设置为某个特定的子域

假设我的登录页面是
example.com
,成功登录后,我的页面将转到
cms.example.com
admin.example.com
。会话应该存储这三个
example.com
cms.example.com
admin.example.com
而不是其他子域

目前我只获得了我的
example.com
会话,但我无法在上述2个子域中获得任何会话

我在这里找到了一些相关的问题和答案|但这是为所有域设置的。这是一个问题,因为我还有一些其他子域,比如
user.example.com
studio.example.com
demo.example.com
等等


如何为特定域和子域设置会话?

会话不能移动到子域。如果您想将会话发送到2个不同的子域,而不是其他子域,我建议您使用cookie并将它们设置到包含子域的特定文件夹中。如果这不是您要寻找的,您可以为所有子域设置它:

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'], strpos($_SERVER['SERVER_NAME'],"."), 100));

我想你已经包括了一个
我也有类似的问题。我用这个把戏解决了它

方法1: 在会话之前添加前缀,以区分子域的会话。 例如:
$\u会话[“cms.id”],$\u会话[“admin.id”]


方法2: 为具有属性和要存储的其余信息的会话创建一个类

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
}

分开的服务器?您是否将会话数据存储在共享数据库中?@lawrencerone不,我存储在同一台服务器中我不是要分发会话
$\u会话[“id”]
应该在
example.com
cms.example.com
admin.example.com
中工作,因为我所有的三个文件代码都是一个。还指出了一个目录。