我打印出会话ID,如下所示:
<?php print YII::app()->session->sessionID; ?>
Run Code Online (Sandbox Code Playgroud)
当我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保持不变.