代码点火器会话在本地工作正常,但在 Godaddy 上不起作用



我在php框架(Codeigniter(上开发了网站,在我的本地(WAMP服务器(上运行良好。当我将其上传到 Godaddy 托管时,它无法登录网站。 下面是登录类函数。

public function index()
{
    if ($this->session->userdata('admin_login') == 1)
        redirect(base_url() . 'index.php?admin/dashboard', 'refresh');

     $this->load->view('backend/login');
}

function ajax()
{
    $response = array();

    $email      = $_POST["email"];
    $password   = $_POST["password"];
    $response['submitted_data'] = $_POST;       

    $login_status = $this->validate_login( $email ,  sha1($password) );
    $response['login_status'] = $login_status;
    if ($login_status == 'success') {
        $response['redirect_url'] = '';
    }
    echo json_encode($response);
}

function validate_login($email  =   '' , $password   =  '')
{
    $credential =   array(  'email' => $email , 'password' => $password );
    $query = $this->db->get_where('users' , $credential);
    if ($query->num_rows() > 0) {
        $row = $query->row();
          $this->session->set_userdata('admin_login', '1');
          $this->session->set_userdata('admin_id', $row->id);
          $this->session->set_userdata('name', $row->name);
          $this->session->set_userdata('login_type', 'admin');
          return 'success';
    }
    return 'invalid';
}

我意识到 $this->session->set_userdata(( 方法不适用于 godaddy。

Please try this 
Please add  session library  just like below.
$this->load->library('session');
if ($this->session->userdata('admin_login') == 1)
        redirect(base_url() . 'index.php?admin/dashboard', 'refresh');

     $this->load->view('backend/login');

首次加载会话库然后而不是使用这个

  if ($this->session->userdata('admin_login') == 1)

使用这个

if ($this->session->userdata['admin_login'] == 1)

检查它是否正常工作

尝试一些替代方案可能有效:在application/config/config.php中更改这些行

$config['sess_cookie_name'] = 'cisession';     //remove(underscore)
$config['cookie_domain']    = ".example.com";  //make it site wide valid

您可以在数组中存储多个会话变量

function validate_login($email = '', $password = '') {
    $credential = array('email' => $email, 'password' => $password);
    $query = $this->db->get_where('users', $credential);
    if ($query->num_rows() > 0) {
        $row = $query->row();
        $sess_array = array(
                'admin_login' => 1,
                'admin_id' => $row->id,
                'name', $row->name,
                'login_type', 'admin'
            );  
        $this->session->set_userdata('logged_in', $sess_array);
    }
    return 'invalid';
}

您需要在构造函数中上传session library

public function __construct()
{
    parent::__construct(); /* necessary! */
    /* load model for calls to database */
    $this->load->library('session');// load session library
    $this->load->helper('url');
}

在您的index中,您必须检查用户logged_in是否设置

public function index()
{
        if ($this->session->userdata('logged_in')){// check session set or not
        redirect(base_url() . 'index.php?admin/dashboard', 'refresh');
        $this->load->view('backend/login');
        }
}

好的,我假设您使用的是 CI2,因为您在不存在的会话变量上得到 FALSE。 CI 会话使用 cookie 和/或数据库,具体取决于您的配置。 配置文件上的 Cookie 设置是什么?

您应该注意以下设置:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

和这些(两种情况下都显示默认配置(:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

您的网站是否托管在子域上? Cookie 通过标头设置。 在设置 Cookie 之前是否生成任何输出? 将log_threshold设置为 2,以便可以看到生成的最终错误和调试消息。

$config['log_threshold'] = 2;

您是否设置了加密密钥?

$config['encryption_key'] = '[there-must-be-something-here]';

我尝试了这里提到的所有答案,但不适用于我的问题。

我的问题是

$this->session->userdata('admin_login')返回假。

最后,我尝试数据库来存储会话。

$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';

并创建了ci_sessions表。

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

然后它工作正常

这应该是您的配置

配置
$config['sess_cookie_name']     = 'cisession';
$config['sess_expiration']      = 7200; 
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

同样在您的模型中,您必须设置会话。

public function login ()
{
    $user = $this->get_by(array(
        'email' => $this->input->post('email'),
        'password' => $this->hash($this->input->post('password')),
    ), TRUE);
    if (count($user)) {
        // Log in user
        $data = array(
            'name' => $user->name,
            'email' => $user->email,
            'gender'=>$user->gender,
            'user_num'=>$user->user_num,    
            'id' => $user->id,
            'loggedin' => TRUE,
            'balance' =>$user->balance,
            'usertype' =>'admin',
        );
        $this->session->set_userdata($data);
    }
}

这对我有用:)

相关内容

最新更新