Yii2$session->;setId()不工作

Yii2$session->;setId()不工作,session,cookies,login,yii2,Session,Cookies,Login,Yii2,我正在使用Ajax从子域登录用户。Yii2应用程序位于另一个子域上。这两个子域都配置为使用相同的cookie和会话域以及保存路径。我将会话ID包括在Ajax调用中,以将用户信息写入非应用子域使用的相同会话,如下所示: $session = Yii::$app->session; $session->open(); $session->setId($post["session"]); $session["user.id"] = $user->id; echo $sessi

我正在使用Ajax从子域登录用户。Yii2应用程序位于另一个子域上。这两个子域都配置为使用相同的cookie和会话域以及保存路径。我将会话ID包括在Ajax调用中,以将用户信息写入非应用子域使用的相同会话,如下所示:

$session = Yii::$app->session;
$session->open();
$session->setId($post["session"]);
$session["user.id"] = $user->id;

echo $session->id; // This does not return the same ID originating from post!
不幸的是,用户信息并没有写入已经存在的会话,而是写入了一个新的会话。在登录过程中间是否有一个会话参与,或者为什么它不工作?我也尝试了
session\u id($post[“session”])
,但什么都没有

这实际上是在上一个域上工作,所以我肯定遗漏了什么。所有AJAX发布的信息都是正确的并经过检查,用户正确登录(检查了日志),但进入了错误的会话


提前谢谢

我认为您没有按照正确的方式进行
设置
获取
会话

试试这个:

$session = Yii::$app->session;
$session->open();
$session->set('id', $post["session"]);
echo $session->get('id');
有关详细信息,请单击

是的包装,您应该阅读有关此函数的PHP文档:

字符串会话\u id([string$id])

如果指定了
id
,它将替换当前会话id。为此,需要在
session\u start()
之前调用
session\u id()

因此,您只需尝试:

$session = Yii::$app->session;
$session->setId($customId);
$session->open();

谢谢,但这不会改变结果
$session->set()
添加会话变量。我需要更改会话的id本身,根据手册,这应该可以通过
$session->setId()
实现。后者是在我以前的服务器上工作的,所以我在正确的轨道上,我只是错过了一些东西…谢谢,这有点帮助。事实上,现在会话文件包含登录前和登录后的信息(用户详细信息),这在以前没有发生过,但它仍然使用完全不同的ID在新文件中写入会话。有什么想法吗?例如,
$oldId=session_ID()$session=Yii::$app->session$会话->设置ID($oldId)$会话->打开()$会话->设置(“oldId”,$oldId)。然后我可以看到会话存储了正确的旧ID,但出于某种原因,它不会将旧ID用作会话ID,而是使用一个新ID。好的,明白了。必须在
$user->login()方法之后分配
会话id()。