【问题标题】:Help w/ Codeigniter session expiration time带有 Codeigniter 会话到期时间的帮助
【发布时间】:2011-05-10 13:10:05
【问题描述】:

我想在 Codeigniter 中动态设置会话过期时间。我正在自动加载会话类。我有一个视图,其中包含供用户单击的复选框(记住我)。现在,如果他们单击复选框或没有过期时间保持不变:/


    // Config.php
    $config['sess_expiration']      = 7200;

    // Controller
    if ($this->input->post('remember_me') == 'TRUE')
    {
    $this->session->remember_me();
    }

    $newdata = array(
    'failed_login'  => 0,
    'user_name'  => $this->input->post('user_name'),
        'logged_in' => TRUE
    );

    $this->session->set_userdata($newdata);

    // MY_Session.php
    class MY_Session extends CI_Session {

    function remember_me()
    {
        $this->sess_expiration = 172800;
    }

    }

【问题讨论】:

    标签: php session codeigniter


    【解决方案1】:

    如果您需要实现“记住我”功能 - 那么您的启动方式错误。

    您需要再创建一个包含字段user_id | token 的数据库表。

    然后,在用户登录后(选中“记住我”复选框) - 生成随机令牌并插入具有当前 user_id 和该令牌的新行。另外 - 使用相同的令牌值设置 remember cookie。

    现在,如果用户进入您的网站,但没有经过身份验证并且有一些令牌 - 您总是可以找到该令牌并验证用户(每个令牌都是唯一的,并且与特定的 user_id 密切相关)。

    【讨论】:

      【解决方案2】:

      这是我一直在使用的解决方案。

      您可以在 domain.com/system/libraries/Session.php 中编辑函数

      function _set_cookie($cookie_data = NULL)
      

      注释掉

      // $expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this->sess_expiration + time();
      

      然后添加

          if(isset($this->userdata['rememberme'])){
              // If they want to stay connected
              if( $this->userdata['rememberme'] == 1) {
                  $expire = 0;
              } else {
                  $expire = time() + $this->sess_expiration;
              }
          } else {
              $expire = time() + $this->sess_expiration;
          }
      

      如果这有帮助,请告诉我,或者修改我的代码来帮助我。谢谢。

      【讨论】:

        【解决方案3】:
        $data = array(
            'username' => $this->input->post('username'),
            'ADMIN_is_logged_in' => true
        );
        
        $this->session->sess_expiration = '14400';// expires in 4 hours
        $this->session->set_userdata($data);// set session
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-29
          • 1970-01-01
          • 2011-05-10
          • 2011-10-23
          • 1970-01-01
          • 2016-04-09
          • 2013-07-04
          • 2012-03-15
          相关资源
          最近更新 更多