【问题标题】:remember me functionality in codeigniter记住我在 codeigniter 中的功能
【发布时间】:2013-12-18 14:50:50
【问题描述】:

我已经实现了记住我这个问题的功能

How to create "remember me checkbox" using Codeigniter session library?

第一个答案。 我创建了一个以随机数代码为值的 cookie,并将其存储在 db(用户表)中。登录时,数据库代码检查 cookie 值。它在我的本地主机服务器上工作正常。但是在具有子域 url 的实时服务器中存在问题。我还用另一台以 ip 地址作为 url 的服务器对其进行了测试。那里也行不通。在这两种情况下,cookie 创建但无法读取 cookie。请帮帮我。

cookie 设置者

$auto_login_hash_code = uniqid();
$domain = $_SERVER['SERVER_NAME'];
$cookie = array(
            'name' => 'rememberMe',
            'value' => $auto_login_hash_code,
            'expire' => 31536000,
            'domain' => $domain,
            'path' => '/'
);
$this->input->set_cookie($cookie);

并通过

读取cookie
    if (get_cookie('rememberMe')) {
$hashcode = $this->CI->input->cookie('rememberMe');
$this->CI->load->model('loginmodel', '', true);
$username = $this->CI->loginmodel->get_username_by_hashcode($hashcode);//in this function setting session variables
    }

提前致谢 iijb

【问题讨论】:

  • 如果您显示您的代码会很有帮助...!
  • 您是否尝试在 cookie 的 domain 键前添加句点?
  • 我相信你不能用一个域设置一个 cookie 并用另一个域读取它,如果这就是你想要做的......
  • 没有在同一台服务器上完成所有事情

标签: codeigniter


【解决方案1】:

您正在 github 上获取该库。 在 github 上搜索记住我,加载它并按照以下步骤操作。 如果数据库中存在令牌,则验证 cookie 转到主页

 $this->load->library('rememberme');  
            $cookie_user = $this->rememberme->verifyCookie();
            if ($cookie_user) 
            {
                $this->load->view('search_view');
            }

else
        {
            // If checkbox is checked it return true either false
            $checked = (isset($_POST['Checkbox1']))?true:false;  

            if($checked== true)

            {
                    //$this->load->view('tested');
                    $this->load->library('rememberme');  
                    $this->rememberme->setCookie($this->input->post('loginemil'));
                    //$this->rememberme->setCookie('set cookie here');

            }
else{
dont set anything
}
}

【讨论】:

    【解决方案2】:

    这也可以通过编辑/扩展系统会话库来完成。

    第一:在用户登录功能中添加remember me check-

        if($remember)
        {
            $data['new_expiration'] = 60*60*24*30;//30 days
            $this->session->sess_expiration = $data['new_expiration'];
        }
        $this->session->set_userdata($data);
    

    第二:编辑系统Session库[不确定是否扩展Session有效] 在sess_read()方法中转到这一行

    if (($session['last_activity'] + $this->sess_expiration) < $this->now)
    

    在该行之前添加以下代码

    if(isset($session['new_expiration'])){
       $this->sess_expiration = $session['new_expiration'];
    }
    

    这对我来说很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多