设置了session的生存时间,重启浏览器之后还是需要重新登录

来源:6-2 会员中心功能实现

no4990

2017-04-23

设定了session的生存时间,也输出了生存时间的数值,数值也正确没有错误,但是关闭浏览器之后需要重新登录。

输出的$lifetime的值就是7*24*3600的结果,用die()来检查是否进入了循环,也没问题。

http://szimg.mukewang.com/58fc2ec30001691807010172.jpg

登录部分的代码如下:

User.php(用户表数据模型)

/**
 * 用户登录
 * @param $data
 * @return bool
 */
public function login($data)
{
   $this->scenario = "login";//场景

   if ($this->load($data) && $this->validate()) {

      //var_dump($data);exit(); //test: 测试数据

      $session = Yii::$app->session;//注册session组件

      if($data['User']['rememberMe']){
         //如果选择了自动登录
         $lifetime = $this->rememberMe ? 7*24*3600 : 0;  //7天
         session_set_cookie_params($lifetime);           //设置生存时间

         //die('设置session生存时间成功!');//test :测试是否设置了session生存时间
      }

      //如果没有选择自动登录,则不进行时间的设定

      /** 进行用户数据的查询 START */
      //默认用用户名登录
      $loginname = "username";

      if (preg_match('/@/', $this->loginname)) {
         //如果用邮箱登录
         $loginname = "useremail";
      }

      //数据查询
      $data = self::find()
         ->where($loginname.' = :loginname and userpass = :pass', [
            ':loginname' => $this->loginname,
            ':pass' => md5($this->userpass)
         ])
         ->one();
      /** 进行用户数据的查询 END */

      //var_dump($data->userid);exit(); //test: 测试数据

      //设置session的值
      $session['userid'] = $data->userid;//用户id,最好用这个做标识
      $session['username'] = $data->username;//用户名
      $session['loginname'] = $this->loginname;//将用户名传入,因为是唯一的,所以可以做标识
      $session['isLogin'] = 1;
      return (bool)$session['isLogin'];
   }
   return false;
}


写回答

1回答

Jason

2017-04-23

直接设置 setcookie(session_name(),session_id(),time()+$lifetime);

0
4
Jason
回复
破宝
看看你的浏览器是不是把cookie关闭掉了
2017-06-23
共4条回复

Yii2.0开发一个仿京东商城平台

【毕设】购物、下单、支付、收货...各功能模块开发,打造京东式电商平台

1543 学习 · 655 问题

查看课程