2016-07-04 14:54:12 11147次浏览 7条回答 0 悬赏 10 金钱

我感觉要么是SESSION过期时间没设置好,或者是SESSION有缓存。

$session = Yii::$app->session;
$session->open();
$session['user'] = [
'id' => $only[0]->id,
    'permissions' => $only[0]->permissions,
    'phone' => $only[0]->phone,
    'password' => $only[0]->password,
    'mask' => $only[0]->mask,
    'name' => $only[0]->name,
    'sex' => $only[0]->sex,
    'birthday' => $only[0]->birthday,
];
$this->user = $session['user'];
$session->close();
'session' => [
	'timeout' => 2,
],
补充于 2016-07-04 14:59

我是想用SESSION保存用户的基本信息,就不用每次登陆都核对数据库了,但是因为我自己测试嘛,有时间直接在数据库把用户数据删掉,然后再重新注册,再次登陆的时候以前的session还没过期,就会用原先的信息,验证现在的信息,导致一直登陆失败。

最佳答案

  • dingjj2010 发布于 2016-07-05 09:23 举报

    用Yii::$app->user->login($user);自动就会用session保存用户信息,如果用户已经登录,直接用Yii::$app->user->identity就可以取到$user的信息了。 可以用Yii::$app->user->isGuest()判断是否登录。Yii::$app->user->logout()退出登录。

    6 条回复
    回复于 2016-07-13 14:08 回复

    这个用法貌似不适合我,因为我并没有用YII生成页面

    回复于 2016-07-13 16:14 回复

    这个和用Yii生成页面没有关系,只是开放一个口,简化你的代码而已。

    回复于 2016-07-14 15:29 回复

    我研究一下,谢谢你

    回复于 2016-07-19 16:54 回复

    我现在用Yii::$app->user->login($user);会报错,应该是我没用好,我想先确定一下,他会用session保存什么用户信息?

    回复于 2016-07-20 09:20 回复

    首先要配置components,里面的user,class定位到你的user模型,然后user模型要继承IdentityInterface就可以。user表结构,直接在项目就可以找到,也可以自己构建。

    回复于 2016-07-20 12:37 回复

    确实可以登录,但是页面刷新,Yii::$app->user->isGuest这个属性就被重置?

  • 回答于 2016-07-04 17:04 举报

    小伙,你每次登陆的时候不更新用户的 SESSION 信息吗?

    1 条回复
    回复于 2016-07-13 14:07 回复

    如果session已经存在了,就不更新。用户修改个人信息,会修改session

  • 回答于 2016-07-04 17:05 举报

    快点给我金钱,哈哈

  • 回答于 2016-07-05 17:58 举报

    如果是要保存登录信息,自动登录的话,应该是要用cookie保存的,你用session的话,浏览器关闭了就木有了,就得重新登录了~
    如果是要做自动登录,数据库中增加auth_key字段即可,模版中的登录程序就会自动实现记住我自动登录的

    1 条回复
    回复于 2016-07-19 16:43 回复

    浏览器关闭怎么自动退出啊。。。。。。。。我一直想实现这个。。。。。求代码。。。1272932541@qq.com

  • 回答于 2016-07-07 11:11 举报

    你既然调用了Yii::$app->session就不用再调用open了
    了解原理,你给你写下原理:

    这里输入代码
    
    $session = Yii::$app->session;
    //当session没有值 或 过期时间到 则重新付值
    if(!isset($session['user']) || $session['user']['expire_time'] < time()){
        $data = [
          'title' => 'data' . time(),  //数据
          'expire_time' => time() + 10, //这里设置10秒过期
        ];
        $session['user'] = $data;
    }
    
    var_dump($session['user']);
    
    

    知道这个原理,你就可以封装函数了,比如封装一个设置过期的session函数了

  • 回答于 2016-07-11 19:00 举报

    调用setCookieParams();

    Yii::$app->session->setCookieParams([])
    数组键值有:lifetime, path, domain, secure  httponly.(见类参考)
    这样:Yii::$app->session->setCookieParams(['lifetime'=>保存时间]);
    
    觉得很赞
  • 回答于 2018-04-26 15:51 举报

    session的过期时间配置有误,不是用timeout,

    'session' => [

    'cookieParams' => ['lifetime' => 5],
    

    ]

您需要登录后才可以回答。登录 | 立即注册
数字派
总监

数字派 北京

注册时间:2016-04-19
最后登录:2023-03-07
在线时长:52小时34分
  • 粉丝10
  • 金钱1515
  • 威望10
  • 积分2135

热门问题