2014-09-13 1 views
0

여기 CodeIgniter 세션에 익숙한 사람이 있습니까? 로그인 스크립트가 작동합니다. 로그인에 성공하면 세션이 만들어집니다. 사용자가 해당 홈 페이지로 리디렉션됩니다. 새 페이지는 세션 변수에 저장된 것처럼 사용자 이름을 표시해야하지만 전혀 표시되지 않습니다.페이지에서 페이지로 코드 네이터 세션이 전송되지 않습니다.

로그인 스크립트 코드 : 여기에

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Login extends CI_Controller { 

    /** 
    * Index Page for this controller. 
    */ 
    public function index() { 
     $this->load->library('session'); 
     $BB_DATA = array(); 
     if(isset($_POST['login'])) { 
      // SELECT username, password FROM Bacon or bacon-like product. <-- Fuck you #nobanchancom 
      if(!empty($_POST['username']) && !empty($_POST['password'])) { 
       $q = sprintf('SELECT user_pk, username, pwhash, salt FROM tbl_user WHERE `username`=%s LIMIT 1;', $this->db->escape($_POST['username'])); 
       $records = $this->db->query($q); 
       $username = $_POST['username']; // i added this 
       if($records->num_rows() == 1) { 
        $record = $records->row(); 
        $test_hash = hash_password($record->salt . $_POST['password']); 
        if($record->pwhash === $test_hash) { 
         $new_salt = generate_salt(); 
         $new_hash = hash_password($new_salt . $_POST['password']); 
         $q = sprintf('UPDATE tbl_user SET `pwhash`="%s", `salt`="%s" WHERE `user_pk`="%s" LIMIT 1;', $new_hash, $new_salt, $record->user_pk); 
         if($updates = $this->db->query($q)) { 
          $BB_DATA['messages']['information'][] = "Login successful."; 

          //add custom data to session 
          $this->session->set_userdata('username', "$username"); 

          //$this->session->set_userdata('some_name', 'some_value'); 
          // redirect to /users/home/ 
          redirect(site_url() . 'users/home/'); exit(); 
         } else { 
          $BB_DATA['messages']['critical'][] = "You have logged in successfully, but an error has occurred during login."; 
         } 
        } else { 
         $BB_DATA['messages']['critical'][] = "That username/password does not match."; 
        } 
       } else { 
        $BB_DATA['messages']['warning'][] = "That username/password does not exist."; 
       } 
      } else { 
       $BB_DATA['messages']['warning'][] = "You must enter a username/password."; 
      } 
     } 
     if(isset($_POST['register'])) { 
      // Redirect to /register/ 
      redirect(site_url() . 'register/'); 
     } 
     $this->load->view('login', $BB_DATA); 
    } 
} 

/* End of file login.php */ 
/* Location: ./application/controllers/login.php */ 

그리고는 사용자의 코드 페이지 방문 수 있습니다 : 로그인 스크립트에서

<?php 
class Users extends CI_Controller { 

    public function home() 
    { 
     $this->session->userdata('username'); 
     require_once(APPPATH . 'views/header.inc.php');//header 
      include(APPPATH . 'views/breadcrumbs.inc.php');//top breadcrumbs 

      echo ' <h1>Welcome'.$username.',</h1>'; 
      //$username = $this->session->userdata('username'); 
      echo $this->session->all_userdata(); 
      //echo $username; 
      include(APPPATH . 'views/breadcrumbs.inc.php');//bottom breadcrumbs 
      require_once(APPPATH . 'views/footer.inc.php');//footer 
    } 



} 

?> 

을, 나는

라이브러리 - codeigniters 세션을 호출

$ this-> load-> library ('session');

나중에 모든 것이 제대로되었다고 가정하면 세션 변수에 $ username 변수가 추가됩니다. 사용자가 리디렉션되고 거기에서부터

$ this-> session-> userdata ('username'); 변수를 다시 설정해야합니다. 그렇지 않습니다.

제안 사항?

참고 : print_r(array_values($this->session->all_userdata()));을 사용하여 배열의 모든 값을 인쇄했습니다. 그것은 포함 :

어레이 ([0] => 4c46f32b249ed55e8439152d63365fed [1] => 75.134.164.245 [2] => 모질라/5.0 (윈도우 NT, Win64를; 64; RV : 26.0) 도마뱀/20,100,101 을 파이어 폭스/26.0 Waterfox가/26.0 [3] => 1410568024 [4] =>를 [5] => ottomatic)

그래서 호기심, 왜으로 추가 않았다 [5]이 아니라 '이름'보다 더?

+0

아무 것도 변수를 초기화하지 않으므로 $ username = $ this-> session-> userdata ('username')을 수행해야합니다. 또한 세션 라이브러리가 사용자 컨트롤러에로드되었는지 확인하십시오. –

+0

내 편집을 참조하십시오. 또한 문서에 따르면 각 컨트롤러에서 세션 라이브러리를 호출하지 않습니다. codeigniter는 초기 호출 후에 자체 세션을 처리합니다. 또는 그것은 오래된 제품이었고 결코 업데이트되지 않았습니까? – user3175451

+1

배열 자체를 print_r'ing하는 대신 array_values ​​()를 사용하기 때문에 5가 인덱스로 표시됩니다. 세션 라이브러리가 자동로드되지 않는다면 (config/autoload.php에서), 사용하려는 모든 컨트롤러에 세션 라이브러리를로드해야합니다. –

답변

0

올바른 방향으로 @ xd6_에서 몇 가지 팁을 보내 주셔서 감사합니다.

설명서를 잘못 읽었습니다. /config/autoload.php 배열에 있지 않으면 각 페이지에서 세션을로드해야합니다. 이 작업이 일단

, 나는 ('이름')를

$로 이름이 username을 = $ this-> 세션 -> 유저 데이터를 배열 요소에 액세스 할 수 있었다;

관련 문제