여기 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]이 아니라 '이름'보다 더?
아무 것도 변수를 초기화하지 않으므로 $ username = $ this-> session-> userdata ('username')을 수행해야합니다. 또한 세션 라이브러리가 사용자 컨트롤러에로드되었는지 확인하십시오. –
내 편집을 참조하십시오. 또한 문서에 따르면 각 컨트롤러에서 세션 라이브러리를 호출하지 않습니다. codeigniter는 초기 호출 후에 자체 세션을 처리합니다. 또는 그것은 오래된 제품이었고 결코 업데이트되지 않았습니까? – user3175451
배열 자체를 print_r'ing하는 대신 array_values ()를 사용하기 때문에 5가 인덱스로 표시됩니다. 세션 라이브러리가 자동로드되지 않는다면 (config/autoload.php에서), 사용하려는 모든 컨트롤러에 세션 라이브러리를로드해야합니다. –