【问题标题】:Codeigniter Cookie issue for back end and front end side后端和前端的 Codeigniter Cookie 问题
【发布时间】:2015-04-28 06:22:13
【问题描述】:

我在Codeigniter 开发了一个应用程序,一切都很顺利,但我有一个问题如下:
我想在前端和后端首次登录后将autologin 实现到仪表板。
说明:
当我第一次登录admin side 时,它转到admin dashboard 并关闭tab/browser 而不点击logout button 并放置admin 链接它进入管理仪表板而无需再次登录,到这里一切都很顺利,但是当我输入 front end link (after first time login and closing tab) 时,它不会转到 admin 仪表板并显示类似

的错误

页面重定向不正确

我在前端也遇到了同样的问题。
我想这样做是因为这是客户的要求。
请帮我解决这个问题。谢谢。

这是我的索引函数

if($_COOKIE['AS_AD_SES_ADMIN_ID']!='' && $_COOKIE['stay_signedin']=='1')
{
        $username = $_COOKIE['ADMIN_USERNAME'];
        $password = $_COOKIE['ADMIN_PASS'];

        $result = $this->verifylogin->login($username, $password);

        foreach($result as $row)
        {
            $sess_array = array(
                     'AS_AD_SES_ADMIN_ID'           =>  $row->fld_id,
                     'AS_AD_SES_ADMIN_FULL_NAME'    =>  $row->fld_user_name,
                     'AS_AD_SES_ADMIN_NAME'         =>  $row->fld_adm_name,
                     'AS_AD_SES_LOGIN_TIME'         =>  date('h:i:s A'),
                     'AS_AD_SES_LOGIN_DATE'         =>  date("d-m-Y"),
                     'AS_SES_ACCESS_LEVEL'          =>  $row->fld_access_level,
                     'AS_TAB_TITLE'                 =>  'Welcome to Project',
                     'logged_in'                    =>  TRUE
                   );

            $this->session->set_userdata($sess_array);
        }
        $this->load->view('dashboard');
}else{
        redirect(base_url());
}

Verifylogin机型登录功能如下

function login($username, $password)
{
    $ip_address=$_SERVER['REMOTE_ADDR'];

    $this -> db -> select('fld_id, fld_user_name,fld_adm_name,fld_adm_pwd,fld_access_level');
    $this -> db -> from('tbl_admin');
    $this -> db -> where('fld_user_name',$username);
    $query = $this -> db -> get();

    if($query -> num_rows() == 1)
    {
        $res = $query->row();
        $pass = $res->fld_adm_pwd; 
        $pass1 = $this->encrypt->decode($pass); 
        if($pass1 == $password)
        {
            $password = $pass;

            $query = $this->db->query("SELECT fld_id,fld_user_name,fld_adm_name,fld_access_level,fld_adm_pwd,fld_stay_signed_in FROM tbl_admin where fld_user_name = '".$username."' and fld_adm_pwd = '".trim($password)."' and fld_isdeleted !=1 and fld_status = 'Active'");

            if($query->num_rows() == 1)
            {
              return $query->result();
            }
        }
        else
        {
            return false;
        }
    }

}

【问题讨论】:

  • 你的代码在哪里??
  • @saty 感谢您的即时回复,我在管理员登录时使用了 cookie,然后我为它设置了 cookie。
  • 在看不到您的代码之前,我们无法为您提供帮助?
  • 好的,我将编辑我的问题并输入我的管理端控制器代码。
  • 为什么使用不必要的 foreach 循环?

标签: php codeigniter cookies


【解决方案1】:

我认为问题是浏览器关闭时 $cookie 会死掉, 我建议使用 $_SESSION 变量。

// Start the session
session_start();

 if($_SESSION['AS_AD_SES_ADMIN_ID']!='' && $_SESSION['stay_signedin']=='1')
        {
            $username = $_SESSION['ADMIN_USERNAME'];
            $password = $_SESSION['ADMIN_PASS'];

            $result = $this->verifylogin->login($username, $password);

            foreach($result as $row)
            {
                $sess_array = array(
                         'AS_AD_SES_ADMIN_ID'           =>  $row->fld_id,
                         'AS_AD_SES_ADMIN_FULL_NAME'    =>  $row->fld_user_name,
                         'AS_AD_SES_ADMIN_NAME'         =>  $row->fld_adm_name,
                         'AS_AD_SES_LOGIN_TIME'         =>  date('h:i:s A'),
                         'AS_AD_SES_LOGIN_DATE'         =>  date("d-m-Y"),
                         'AS_SES_ACCESS_LEVEL'          =>  $row->fld_access_level,
                         'AS_TAB_TITLE'                 =>  'Welcome to Project',
                         'logged_in'                    =>  TRUE
                       );

                $this->session->set_userdata($sess_array);
            }
            $this->load->view('dashboard');
        }else{
            redirect(base_url());
        }

【讨论】:

  • 我想在 Codeigniter 中实现记住我的功能,因为如果用户选中登录表单上的记住我复选框,我必须使用并设置 cookie 2 周。
  • set_userdata 用于会话变量,对于 cookie,您需要设置 cookie
  • w3schools.com/php/func_http_setcookie.asp ,关于如何设置cookie。
【解决方案2】:

如果您的 verifylogin->login 函数将返回 false,那么您也在加载仪表板视图。您需要检查它是否返回错误或结果。而且你不需要 foreach 来获得单个结果。

if($_COOKIE['AS_AD_SES_ADMIN_ID']!='' && $_COOKIE['stay_signedin']=='1')
{
    $username = $_COOKIE['ADMIN_USERNAME'];
    $password = $_COOKIE['ADMIN_PASS'];

    $row = $this->verifylogin->login($username, $password);

    if($row)
    {
        $sess_array = array(
                 'AS_AD_SES_ADMIN_ID'           =>  $row->fld_id,
                 'AS_AD_SES_ADMIN_FULL_NAME'    =>  $row->fld_user_name,
                 'AS_AD_SES_ADMIN_NAME'         =>  $row->fld_adm_name,
                 'AS_AD_SES_LOGIN_TIME'         =>  date('h:i:s A'),
                 'AS_AD_SES_LOGIN_DATE'         =>  date("d-m-Y"),
                 'AS_SES_ACCESS_LEVEL'          =>  $row->fld_access_level,
                 'AS_TAB_TITLE'                 =>  'Welcome to Project',
                 'logged_in'                    =>  TRUE
               );

        $this->session->set_userdata($sess_array);
        $this->load->view('dashboard');
    }else{
        redirect(base_url());
    }
}else{
    redirect(base_url());
}


function login($username, $password)
{
    $ip_address=$_SERVER['REMOTE_ADDR'];

    $this -> db->select('fld_id, fld_user_name,fld_adm_name,fld_adm_pwd,fld_access_level');
    $this -> db -> from('tbl_admin');
    $this -> db -> where('fld_user_name',$username);
    $query = $this -> db -> get();

    if($query -> num_rows() == 1)
    {
        $res = $query->row();
        $pass = $res->fld_adm_pwd; 
        $pass1 = $this->encrypt->decode($pass); 
        if($pass1 == $password)
        {
            $password = $pass;

            $query = $this->db->query("SELECT fld_id,fld_user_name,fld_adm_name,fld_access_level,fld_adm_pwd,fld_stay_signed_in FROM tbl_admin where fld_user_name = '".$username."' and fld_adm_pwd = '".trim($password)."' and fld_isdeleted !=1 and fld_status = 'Active'");

            if($query->num_rows() == 1)
            {
              return $query->row();
            }
        }
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2020-11-10
    • 2016-01-29
    • 2022-06-30
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多