Codeigniter会话在本地工作正常,但不适用于Godaddy

时间:2014-11-01 10:23:22

标签: codeigniter

我在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。

7 个答案:

答案 0 :(得分:2)

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');

答案 1 :(得分:2)

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

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

使用此

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

检查它是否有效

答案 2 :(得分:1)

尝试一些替代方案可能有效: 在application/config/config.php

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

答案 3 :(得分:1)

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

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');
        }
}

答案 4 :(得分:1)

好的,我假设你正在使用CI2,因为你在一个不存在的会话var上得到了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]';

答案 5 :(得分:1)

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

我的问题是

  

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

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

$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`)
);

然后它工作正常

答案 6 :(得分:0)

这应该是您的配置配置

You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 
'ON DUPLICATE KEY UPDATE updated_at = now()

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

$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;

这对我有用:)