我正在使用Ajax从子域登录用户。 Yii2应用程序位于另一个子域。这两个子域都配置为使用相同的cookie和会话域并保存路径。我在Ajax调用中包含会话ID,将用户信息写入非app子域所使用的同一会话中,如下所示:
$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_id($post["session"])
,但没有。
这实际上是在以前的域上工作,所以我必须遗漏一些东西。所有AJAX发布的信息都是正确的并且已经过检查,用户已正确登录(检查日志)但进入了错误的会话。
提前致谢!
答案 0 :(得分:2)
yii\web\Session::setId()
是session_id()
的包装器,您应该阅读有关此函数的PHP文档:
<强>
string session_id([ string $id ])
强>如果指定了
id
,它将替换当前的会话ID。为此目的,session_id()
之前需要调用session_start()
。
所以你应该试试:
$session = Yii::$app->session;
$session->setId($customId);
$session->open();
答案 1 :(得分:0)
我不认为你正在按照正确的方式前往SET
&amp; GET
会话。
试试这个:
$session = Yii::$app->session;
$session->open();
$session->set('id', $post["session"]);
echo $session->get('id');
有关详情,请点击Session Management - Yii2