2014-11-01 88 views
6

我開發了關於在我的本地(WAMP服務器)上正常工作的php框架(Codeigniter)的網站。當我將它上傳到Godaddy主機時,它無法登錄到網站。以下是登錄類功能。Codeigniter會話在當地工作正常,但不能在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'; 
} 

我意識到這 - $>會話級> set_userdata()方法是在GoDaddy的工作。

+1

這個問題似乎是【題外話】(http://stackoverflow.com/help/on-topic)。 – jurgemaister 2015-03-23 10:59:21

+0

請問你的'/ config/config/config.php'文件中'$ config ['sess_use_database']'的設置是什麼? – 2015-09-03 08:39:14

回答

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

正如我已經提到,我的應用程序在我的本地機器上正常工作。因爲我已經加載autoload.php中的會話庫i-e $ autoload ['libraries'] = array('session') – bravo 2014-11-01 10:44:01

+0

我也嘗試在遠程服務器上添加$ this-> load-> library('session')。它失敗了。 – bravo 2014-11-01 10:45:44

2

首先加載Session庫 然後 而不是使用此

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

使用此

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

檢查它是否是工作或沒有

+0

仍然收到同樣的錯誤。 – bravo 2014-11-01 11:35:12

+0

在編碼方面沒有問題,但在godaddy託管中存在問題,它無法在託管服務器上存儲會話。 – bravo 2014-11-01 11:37:39

+0

if if($ this-> session-> userdata ['admin_login'] =='1'){redirect(base_url()。'index.php?admin/dashboard','refresh');} else {$ this - > load-> view('backend/login');} – 2014-11-01 11:39:59

1

嘗試一些替代品的可能工作: 更改這些l在application/config/config.php

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

INES您可以將多個會話變量存儲在陣列

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

你需要在你的構造

public function __construct() 
{ 
    parent::__construct(); /* necessary! */ 

    /* load model for calls to database */ 
    $this->load->library('session');// load session library 
    $this->load->helper('url'); 
} 

上傳session library在你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'); 
     } 
} 
1

好的,我假設你使用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]'; 
1

我嘗試了所有在這裏提到的答案,但沒有爲我的問題工作。

我的問題是

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

Finaly我試過數據庫來存儲會話。

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

然後正常工作

0

這應該是你的Config配置

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

這個工作對我來說:)

相關問題