Yii2 $ session-> setId()不起作用

时间:2016-05-31 06:57:10

标签: session cookies login yii2

我正在使用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发布的信息都是正确的并且已经过检查,用户已正确登录(检查日志)但进入了错误的会话。

提前致谢!

2 个答案:

答案 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