2014-11-01 14 views
6

Ich entwickelte Website auf PHP-Framework (Codeigniter), die auf meinem lokalen (WAMP-Server) funktioniert gut. Wenn ich es auf Godaddy hosting hochlade, kann ich mich nicht in die Website einloggen. Unten ist die Login-Klassenfunktion.Codeigniter Sitzung funktioniert gut auf lokaler, aber nicht auf Goodaddy

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

Ich weiß, dass $ this-> Session-> set_userdata() -Methode nicht auf GoDaddy arbeiten.

+1

Diese Frage erscheint [off topic] zu sein (http://stackoverflow.com/help/on-topic). – jurgemaister

+0

Darf ich fragen, was ist die Einstellung für '$ config [' sess_use_database ']' in Ihrer '/ application/config/config.php' Datei? –

Antwort

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

Wie bereits erwähnt, funktioniert meine Anwendung auf meinem lokalen Rechner einwandfrei. Wie ich bereits Session-Bibliothek in autoload.php laden i-e $ autoload ['Bibliotheken'] = Array ('Sitzung') – bravo

+0

Ich versuche auch, indem $ this-> load-> Bibliothek ('Sitzung') auf Remote-Server. und es scheitert. – bravo

2

Zuerst laden Session Bibliothek dann Anstatt diese für die Verwendung von

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

Verwendung Diese

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

Überprüfen Sie, ob es funktioniert oder nicht

+0

Immer noch der gleiche Fehler. – bravo

+0

Es gibt kein Problem beim Codieren, aber ein Problem beim Hosting von godaddy, es konnte keine Sitzungen auf dem Hosting-Server speichern. – bravo

+0

schreibe if ($ this-> session-> userdata ['admin_login'] == '1') {redirect (base_url(). 'Index.php? Admin/dashboard', 'refresh');} else {$ this -> load-> view ('backend/login');} –

1

ein paar Alternativen versuchen, Arbeit: Ändern Sie diese l ines in application/config/config.php

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

Sie können

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

in Array mehrere Sitzungsvariablen speichern, müssen Sie session library in Ihrem Konstruktor

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

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

In Ihrem index Sie Benutzer logged_in ist zu überprüfen hochladen Set oder nicht

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

OK, ich nehme an, Sie verwenden CI2, da Sie bei einer nicht vorhandenen Sitzungsvariable FALSE erhalten. CI-Sitzungen verwenden je nach Konfiguration Cookies und/oder eine Datenbank. Wie lauten die Cookie-Einstellungen in deiner Konfigurationsdatei?

sollten Sie die Aufmerksamkeit auf diese Einstellungen zahlen:

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

und diese hier (Standardkonfiguration auf beiden Fällen angezeigt):

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

ist Ihre Website auf eine Sub-Domain gehostet? Cookies werden über Header gesetzt. Wird eine Ausgabe generiert, bevor Ihre Cookies gesetzt werden? Richten Sie Ihren log_threshold auf 2 ein, damit Sie eventuelle Fehler sehen und Fehlermeldungen generieren können.

$config['log_threshold'] = 2; 

Haben Sie einen Schlüssel eingerichtet?

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

Ich versuchte alle Antworten, die hier erwähnen, aber nicht für mein Problem arbeiten.

Mein Problem ist

$this->session->userdata('admin_login') false zurück.

Endlich habe ich versucht Datenbank speichern Sitzung.

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

und erstellt ci_sessions Tisch.

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

Dann funktioniert es gut

0

Dies sollte Ihre Config Konfiguration

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

Auch in Ihrem Modell Sie sich die Sitzung festlegen.

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

Dies funktioniert für mich :)

Verwandte Themen