【问题标题】:Yii session storage, lifetime and cookiesYii 会话存储、生命周期和 cookie
【发布时间】:2016-03-23 19:01:54
【问题描述】:

在配置文件会话 storaged 中使用 Yii 框架的处理如下:

        'session' => array(
        //'sessionName' => 'SomeSession',
        'class' => 'CDbHttpSession',
        'connectionID' => 'SomeConnection',
        'autoCreateSessionTable' => false,
        'sessionTableName' => 'SomeTable',
        'autoStart' => 'false',
        'cookieMode' => 'only',
        'useTransparentSessionID' => false,
        'timeout' => CSESSIONTIMEOUT,
        'cookieParams' => array(
            'path' => '/',
            'domain' => '.somedomain.extension',
            'expire' => time()+5256000,
            'lifetime' => time()+5256000,
            //'httpOnly' => true,
        ),
    ),

因此,正如您所见,会话存储在具有给定生命周期的数据库中的表中。但是,如果我检查数据库中存储的会话,它们并没有以给定的生命周期存储,而是以一年的生命周期存储。

在我们的应用程序中,我能找到的唯一生命周期为一年的就是 cookie。比如这样:

setcookie("cookie_name", $someValue, time()+31536000, "/", "somedomain");

让我感到困惑的是我们应用程序中的 cookie。这可能会覆盖 Yii 会话存储配置吗?

更新

我也遇到过这行代码

$_SESSION['POLL_'.$idPoll.'somekey'] = strtotime("now");

那行代码在数据库中插入了一条会话记录。但该记录也有一年的寿命。这怎么可能?

【问题讨论】:

    标签: php session cookies yii


    【解决方案1】:

    您需要像这样将timeout 参数添加到配置中:

    'session' => array(
            'class' => 'CDbHttpSession',
            'timeout' => 5256000,
            // ...
    

    【讨论】:

    • 上面的constance已经定义,但我会试试你的建议
    • @PimD1988 我查过了。在表 Session 中设置过期值 + 5256000
    • 是的,但关键是会话存储的时间比定义的要长,实际上是一年,这不是我想要发生的。
    • @PimD1988 好的。尝试将下一行插入控制器的任何操作:echo gmdate("Y-m-d", time()+5256000); die();。你看到了什么?在我的情况下结果:2016-02-17
    【解决方案2】:
    Try Cookies Like this : -   
     if (isset($_POST['remember'])) {
               $cookieUsername = new CHttpCookie('phoenix_admin_username', $_POST['LoginForm']['username']);
               $cookiePassword = new CHttpCookie('phoenix_admin_password', base64_encode($_POST['LoginForm']['password']));
               $cookieUsername->expire = time() + 604800;
               $cookiePassword->expire = time() + 604800;
               Yii::app()->request->cookies['phoenix_admin_username'] = $cookieUsername;
                 Yii::app()->request->cookies['phoenix_admin_password'] = $cookiePassword;
     } 
    
      ////////////Check like this//////////////
    
        if(isset(Yii::app()->request->cookies['phoenix_admin_username'])){
            $model->username = Yii::app()->request->cookies['phoenix_admin_username']->value;
            $model->password = base64_decode(Yii::app()->request->cookies['phoenix_admin_password']->value);
        }else{
            $model->username = "";
            $model->password = "";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      相关资源
      最近更新 更多