2

我像这样打印出会话 ID:

<?php print YII::app()->session->sessionID; ?>

例如,当我log-in检查我的ID时,它类似于:huh09vuo33scdlkmfuc8651t12。如果我注销并再次检查,我的 ID 保持不变。但是,如果我再次重新登录,会话 ID 会更改!

我的问题是我的会话中有信息需要存储在 cookie 中并在登录后重新加载。如果他的会话 ID 更改,我如何才能唯一地确定登录的用户是正确的用户?

4

2 回答 2

5

该组件Yii::app()->user是一个CWebUser实例,CWebUser::logout(boolean $destroySession=true)文档说明:

$destroySession ( boolean ) 是否销毁整个会话。默认为 true。如果为 false,则将调用 clearStates,它仅删除通过 setState 存储的数据。

实际上,Yii::app()->user->logout(true)销毁会话,意味着所有会话信息都无法恢复,它使用PHP的session unsetsession destroy分别取消设置所有会话信息和销毁服务器上的会话ID信息。但Yii::app()->user->logout(false) 不会破坏原始会话信息或取消设置会话 ID,它只会清除会话状态,这是 Yii 实际使用的信息。您可以将其归类为“软注销”,因为原始会话信息保持关联与会话,只有状态与会话 ID 解除关联,但会话 ID 保持不变..

于 2013-03-19T00:25:50.740 回答
0

不要问我怎么做,但这解决了我的问题:

我变了:

Yii::app()->user->logout();

Yii::app()->user->logout(false);

也许它会帮助其他人,或者至少引导他们朝着正确的方向前进。

于 2013-03-18T16:50:41.483 回答