我像这样打印出会话 ID:
<?php print YII::app()->session->sessionID; ?>
例如,当我log-in
检查我的ID
时,它类似于:huh09vuo33scdlkmfuc8651t12
。如果我注销并再次检查,我的 ID 保持不变。但是,如果我再次重新登录,会话 ID 会更改!
我的问题是我的会话中有信息需要存储在 cookie 中并在登录后重新加载。如果他的会话 ID 更改,我如何才能唯一地确定登录的用户是正确的用户?
该组件Yii::app()->user
是一个CWebUser
实例,CWebUser::logout(boolean $destroySession=true)
文档说明:
$destroySession ( boolean ) 是否销毁整个会话。默认为 true。如果为 false,则将调用 clearStates,它仅删除通过 setState 存储的数据。
实际上,Yii::app()->user->logout(true)
销毁会话,意味着所有会话信息都无法恢复,它使用PHP的session unset
和session destroy
分别取消设置所有会话信息和销毁服务器上的会话ID信息。但Yii::app()->user->logout(false)
不会破坏原始会话信息或取消设置会话 ID,它只会清除会话状态,这是 Yii 实际使用的信息。您可以将其归类为“软注销”,因为原始会话信息保持关联与会话,只有状态与会话 ID 解除关联,但会话 ID 保持不变..
不要问我怎么做,但这解决了我的问题:
我变了:
Yii::app()->user->logout();
至
Yii::app()->user->logout(false);
也许它会帮助其他人,或者至少引导他们朝着正确的方向前进。