
質問
MacbookでCodeIgniter3.06を使用してsessionを使用して簡単なアプリを作ろうとしております。その際に下記の部分でsessionがうまく表示されず詰まっております。よろしくお願いいたします。
写真
目標
写真の yourname is 〇〇
の部分にセッションで保存した名前を表示すること
コード
Controler/Main.php
コード <?php defined('BASEPATH') or exit('No direct script access allowed'); class Main extends CI_Controller { public function login_validation(){ $this->load->library("form_validation"); $this->form_validation->set_rules("username", "Username", "required|trim|callback_validate_credentials"); $this->form_validation->set_rules("password", "Password", "required|trim|md5"); if($this->form_validation->run()){ //このページでセッションを確認する redirect("main/registration"); }else{ $this->load->view('body_login'); } } public function validate_credentials(){ $this->load->model("news_model"); if ($this->news_model->can_log_in()){ return true; }else{ //ログインが失敗した際のこちらのフラッシュデータは問題なく表示されます。 $this->session->set_flashdata("message", "incorrect username or password"); return false; } } }
Model / News_model.php
コード <?php class News_model extends CI_Model { public function can_log_in(){ $this->db->where('username', $this->input->post('username')); $this->db->where('password', md5($this->input->post('password'))); $query = $this->db->get("accounts"); if ($query->num_rows() == 1) { $row = $query->row(); $data = array( "username" => $row->username ); //var_dump($data);の結果は下記に記載 $this->session->set_userdata($data); return true; }else{ return false; } } }
View( redirect("main/registration")で表示されるページのコード)
コード <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="<?php echo base_url(); ?>assets/bootstrap-3.4.1-dist/css/bootstrap.min.css"> </head> <body> <h1><?= "yourname is" . $this->session->username ?></h1> <!-- 開発用 --> <h1><?= $this->session->username; ?></h1> <h1><?php echo print_r($this->session->all_userdata()); ?></h1> <?php echo $this->session->username; ?> <h1><?php echo pr($_SESSION) ?></h1> <h1><a href="<?= base_url(); ?>main/logout">logout</a></h1> //省略 </body> </html>
追記
Model / News_model.php(Medelのコード)において
var_dump($data)を実行したところ、
array( "username" => "パスワード" );
のようにしっかりと表示されていたことから、セッションの保存期間や保存場所に問題があるのかもしれないとも考えております。
また、パスワードと名前が一致しない場合には
Controler/Main.php
の
$this->session->set_flashdata("message", "incorrect username or password");
で
flashdataが表示されることも参考になるかもしれません。ただそれでもいまだに根本的な原因がわからないでいます。
追記1
追記2
Controllers/main.php (Controller)
<?php defined('BASEPATH') or exit('No direct script access allowed'); class Main extends CI_Controller { public function index() { $this->load->view('head_login'); $this->load->view('body_login'); $this->load->view('footer'); } public function registration(){ $this->load->view('head'); $this->load->view('body_registration'); $this->load->view('footer'); } public function registration_account(){ $this->load->model("news_model"); $pass = md5($this->input->post('password')); $this->news_model->registration_add($pass); redirect("main/registration"); } public function login_validation(){ $this->load->library("form_validation"); $this->form_validation->set_rules("username", "Username", "required|trim|callback_validate_credentials"); $this->form_validation->set_rules("password", "Password", "required|trim|md5"); if($this->form_validation->run()){ // $this->session->set_flashdata('message', '次ページではこのメッセージは取得できません'); $this->session->set_userdata('username', 'コメント主からのメッセージ'); $this->session->set_flashdata('message', 'コメント主からのメッセージ'); $this->session->set_flashdata('username', 'コメント主からのメッセージ'); redirect("main/registration"); }else{ $this->session->set_flashdata('message', 'ログインに失敗しました'); $this->load->view('body_login'); } } public function validate_credentials(){ $this->load->model("news_model"); if ($this->news_model->can_log_in()){ // $this->session->set_flashdata("message", "OK"); return true; }else{ $this->session->set_flashdata("message", "incorrect username or password"); return false; } } public function logout(){ $this->session->sess_destroy(); redirect("main/index"); } }