2014-11-01 119 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); 
    } 
} 

这个工作对我来说:)

相关问题