请问2.0.2高级程序模板建立的应用。 为什么前台登录后,后台不会同步登录信息? [ 2.0 版本 ]
如题。
请问2.0.2高级程序模板建立的应用。 为什么前台登录后,后台不会同步登录信息? 或者后台登陆前台也不会同步登录信息。
我自己将应用改名了
backend => admin
frontend => www
并且新建了manage的应用
现在登录了 其中任何一个应用 其他2个应用不能像官方的初始化程序一样, 同步登录信息, 不知道是哪里的问题。 还请各位朋友帮助下,谢谢。
-----占位--------
楼上的兄弟,按照你说的方法 搜索了很多资料。没有实现。
我重新安装了yii2的高级模板。 然后配置了2个域名 admin.xxx.com 到 backend www.xxx.com 到 frontend 一样不能同步登录,是我理解错了吗? 不知道哪位朋友知道,yii2同一个根域名下, aaa.xxx.com 和 bbb.xxx.com 是否能够同步登录退出呢?谢谢各位的回答。
fly:你好。 不知道配置session的位置是哪里? 我在网上搜索了下,都是讲yii\web\Session这个类的用法的。偶然几个说到配置的还实在说将session存储到数据库的内容。 暂时还没看官方的说明文件。不好意思直接问你了。 谢谢。
我又重新测试了一下。
这是配置文件,我直接在common/config下面配置了
'session' => [
'class' => 'yii\web\Session',
'name' => 'MySSID',
],
然后在chrome中查看信息
www.xxx.com 的信息为
Cookie:QEv5_2132_saltkey=HizNnH1W; QEv5_2132_lastvisit=1421338648; AJSTAT_ok_times=3; PHPBACKSESSID=rb07li8lnpcv0v008r9m3a2r13; _csrf=25fa0015b940fb47445fec2732bcdb8134f4925f80b78eaa49fe8924b4041ba0s%3A32%3A%22TJYdj5LvQ0SXEju7U-NLHo6kTe7yfzNN%22%3B
Set-Cookie:**MySSID=qcdllqom6i5tts4qil9dloa5r3**; path=/; HttpOnly
admin.xxx.com 的信息为
Cookie:_csrf=617c89ac0dff039f156cd3c879a8b3f8e56b4bda01600884f986a15118ac9529s%3A32%3A%223jNGXbBZjTQ3sjpP4HReDwQOVCZRn59i%22%3B; PHPBACKSESSID=ukrgd82k4jl2h4m23f5g9mgkf5; **MySSID=usv3k42ie9aaot7sthrg0a8qm2**; _identity=c120e6969800259b0a58161b41ed20ad2e9a1e60917f19f03b8e2d3b1c4d04b9s%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B
Set-Cookie:_identity=c120e6969800259b0a58161b41ed20ad2e9a1e60917f19f03b8e2d3b1c4d04b9s%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B; expires=Thu, 26-Feb-2015 10:00:35 GMT; Max-Age=2592000; path=/; httponly
不知道我哪里出错了。 还请指教。谢谢。
请问。 配置了 www admin 2个应用的 config/main.php 文件 配置内容为
'session' => [
'class' => 'yii\web\Session',
'name' => 'SITESSID',
],
'session' => [
'class' => 'yii\web\Session',
'name' => 'ADMINSSID',
],
依然不行。
然后我将配置移动到上一层数组。
'params' => $params,
'session' => [
'class' => 'yii\web\Session',
'name' => 'SITESSID',
],
yii直接报错
Invalid Call – yii\base\InvalidCallException
Setting read-only property: yii\web\Application::session
还请解答一下原因,谢谢了。
当然这个是说 设置了只读的属性。
我想问的问题是 到底应该怎么设置 各应用之间的登录信息才会同步呢?
fly 你好。
我chrome39 清理了所有的缓存。
然后配置文件 全部放在各应用下的config/main.php下面了。
配置方法为 设置了 components 组件中的 session 数组
www/config/main.php
'class' => 'yii\web\Session',
'name' => 'SITESSID',
admin/config/main.php
'class' => 'yii\web\Session',
'name' => 'ADMINSSID',
现在,已经可以实现各应用的session name 为配置内容。并且2个应用的session也不一样。
Cookie:_csrf=24df2578924034d6abc37a9cb57fb24c11a9acd0af5f9fcc16f44c9449db1e3es%3A32%3A%22Yx6YHWOSnCUwzCZVil3bBfcqd7lCN5Q9%22%3B; **ADMINSSID=0iiuv63bs5i4uta8h0m9n9qfn3**; _identity=c93e0d595a75aeaa6c291cbf6bdcc6d8349ffeab8bc600d92bd88d2da1662e72s%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B
Cookie:_csrf=647e40861fa53a29f7525910aee78a6a570beb6b7dc311aa829c73740345de4es%3A32%3A%22OH3kTTcEqcZGxzr7kQk3sA7SQvTw3E7w%22%3B; **SITESSID=lphbtj675q5vki49jqtsci20p1**
其中ADMINSSID的站点已经登录 但是 SITESSID的站点还是显示未登录。
不知道哪里设置的不对,依然不能实现2个应用同步登录退出,如果可以,还请继续指导下。谢谢。
折腾2天了,是不是我的思路不对,yii2不支持这种方式,因为毕竟是不同的子域名。比如为了防止跨站攻击等,yii是不容许这样进行用户身份管理的? 或者在不同子域名之间实现身份认证的同步有其他的方案?多谢了。
fly,你好。现在2个应用的 cookie中的_identity 是一样了。PHPSESSID不一样。如下:(yii.com是我本地hosts劫持的。)
应用admin中的信息 admin.yii.com
Cookie:_csrf=a67db463b265429314759d63a9549834d5e2df14e9dbc3bbff45e0e2a035f5ebs%3A32%3A%22Fiv7oCmMR9PxDgXv1J-pUfy83f04rEoa%22%3B; _identity=5cebb6f1abb9446046103683615dca2486a6dbb7ea9fca32edf451b8e40c131ds%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B; PHPSESSID=r8b4ssig5fo0k68jj94pk0c2e5
Set-Cookie:_identity=5cebb6f1abb9446046103683615dca2486a6dbb7ea9fca32edf451b8e40c131ds%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B; expires=Fri, 27-Feb-2015 07:04:20 GMT; Max-Age=2592000; path=/; domain=.yii.com; httponly
应用www的cookie www.yii.com
但是依然不能同步登录,比如上方。admin.yii.com是我登录的。 然后我刷新www.yii.com还是未登录状态
fly,太感谢了。问题解决。 十分感谢你的耐心。
最佳答案
-
我安装了
advanced
模板,测试了下在
common
下 配置'user' => [ 'identityCookie' => [ 'name' => '_identity', 'path' => '/', 'domain' => '.t1.com', 'httpOnly' => true, ], ], 'session' => [ 'cookieParams' => [ 'name' => '_identity', 'path' => '/', 'domain' => '.t1.com', 'httpOnly' => true, ], ],
www.t1.com
,admin.t1.com
可以实现一同登录,一同注销,你按照我的这个配置下看看,其他的配置就不需要了,这个主要是为了让PHPSESSIONID
,和_identity
生成的cookie
都在域.t1.com
下,并且共用session
其他 7 个回答
-
估计你没有针对两个应用使用不同的
session name
,都是默认的PHPSESSID
,这样是会被相互覆盖的,需要设置不同的session name
, session_name。yii\web\Session
有public function setName($value)
方法, 所以你可以在配置文件里面配置不同的session name
, 代码上不用改动,推荐这样子,试下看看。 -
配置在 components 组件内的,移动到上层,肯定是错的
你在 common/config 里面配置的 session 已经生效了
www.xxx.com 的信息为 Set-Cookie:MySSID=qcdllqom6i5tts4qil9dloa5r3; path=/; HttpOnly admin.xxx.com 的信息为 MySSID=usv3k42ie9aaot7sthrg0a8qm2;
这里两个应用的
PHPSESSIONID
都已经变成了MySSID
了,但是因为在common
下面,所有www
和admin
公用了session name
,所以要单独配置在www
和admin
下,配置成不同的名字,然后在检查下生成的cookie name
有没有变化,如果有不同,但是还是无法共同登录的话,有可能就是其他原因造成的了还有,测试的时候多刷新几次,先把其他的
cookie
清理掉,在单独测试 -
admin.xxx.com
Cookie:_csrf=24df2578924034d6abc37a9cb57fb24c11a9acd0af5f9fcc16f44c9449db1e3es%3A32%3A%22Yx6YHWOSnCUwzCZVil3bBfcqd7lCN5Q9%22%3B; ADMINSSID=0iiuv63bs5i4uta8h0m9n9qfn3;_identity=c93e0d595a75aeaa6c291cbf6bdcc6d8349ffeab8bc600d92bd88d2da1662e72s%3A14%3A%22%5B1%2C%22%22%2C2592000%5D%22%3B
www.xxx.com
Cookie:_csrf=647e40861fa53a29f7525910aee78a6a570beb6b7dc311aa829c73740345de4es%3A32%3A%22OH3kTTcEqcZGxzr7kQk3sA7SQvTw3E7w%22%3B; SITESSID=lphbtj675q5vki49jqtsci20p1
www
的站点下cookie
没有_identity
这个key
,是没有登录么?admin
和www
都登录的情况下,_identity
应该是有两个的,admin
下有一个host:admin.xxx.com, path:/
www
下有一个host:www.xxx.com,path:/
你都登录下,把
_identity
的cookie
信息都拿出来看下 -
靠,你说的是前后台同步登录呀
理解错了,以为你说的是
前台登录了,后台就掉线了,后台登录了,前台就掉线了
,以为你相同的session
被覆盖了在 common 配置下 components 里面,配置下 user
'user' => [ 'identityCookie' => [ 'name' => '_identity', 'domain' => '.xxx.com', 'path' => '/', 'httpOnly' => true, ], ],
用这个把 identity cookie 的信息配置下,生成的 cookie 信息应该是
域: .xxx.com, 路径: /
测试下看 ok 不,我这边没有 advance 模板,我弄个看看
xjdata
最后登录:2024-05-05
在线时长:112小时38分
- 粉丝23
- 金钱14169
- 威望75
- 积分16039