前后台分理离需要在各自的配置文件main.php中设置component的user组件中identityCookie参数和idParam参数,否则当管理员登录了前台的账号的时候,再登录后台,前台账号的会话信息会被覆盖。
前台frontend配置如下:
components=>[
'user'=>[
'identityClass' => 'frontend\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
'idParam'=>'_user',
]
]
后台backend配置如下:
components=>[
'user'=>[
'identityClass' => 'backend\models\Admin',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
'idParam'=>'_admin',
]
]
解决退出报400错误的问题:
假设我们在同一个浏览器打开backend和frontend,打开浏览器控制台,yii2默认配置会有个cookie名为_csrf的cookie,我们刷新打开的frontend前台页面,发现它的值并没有改变,而当我们刷新后台backend的时候,此时名为_csrf的cookie的值就改变了。到这儿,相信我们就发现问题所在了。此时我们只需要配置下这个_csrf的名字就行了。打开前后台的配置文件,分别如下配置
components=>[
'request'=>[
'csrfParam'=>'_csrf_backend'
]
]
components=>[
'request'=>[
'csrfParam'=>'_csrf_frontend'
]
]
保存后删除当前网站的cookie,刷新页面。应该就能解决这个问题。