งงกับเรื่อง Session ของ PHP Codeigniter ทำไหมเรา Copy URL มันยังสามารถเข้าใช้งานได้เลยโดยไม่ต้องผ่านการล็อกอิน
เอาโค้ดมาดูครับ
ถ้าใช้เป็น session ตอน log in ต้องส่งค่า session ให้ user
แล้วในหน้าต่างๆที่ต้องตรวจ log in ต้องเช็ค session ตลอด ไม่รู้ว่าทำตามนี้รึเปล่าครับ?
ถ้าทำ เมื่อปิดหน้าต่าง แล้วเปิดใหม่ตรงๆ มันจะเข้าไม่ได้ ต้องไป log in
Date :
2011-10-18 09:25:54
By :
mr.v
controller
Code
function index()
{
parent::Controller();
$this->load->library('session');
if (!$this->session->userdata('logged_in'))
{
redirect('admin_all/login_form');
}
echo $this->session->userdata('logged_in');
}
function login_form()
{
//echo "รหัสผ่านไม่ถูกต้อง";
$this->load->view('login1');
}
function validate_credentials() // Check textbox -------------------------User Login
{
$this->load->model('admin_model');
$query = $this->admin_model->validate();
$query1 = $this->admin_model->validate_user();
if($query)
{
$data = array(
'u_name' => $this->input->post('u_name'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('admin_all/load_user');
}else if($query1){
$data1 = array(
'u_name' => $this->input->post('u_name'),
'is_logged_in' => true
);
$this->session->set_userdata($data1);
redirect('admin_all/load_page');
}else{
$this->index();
}
}
Model
Code
function _construct(){
parent::Model();
}
function validate()
{
$this->db->where('u_name',$this->input->post('u_name'));
$this->db->where('p_word',md5($this->input->post('p_word')));
$query = $this->db->get('tb_admin');
if($query->num_rows == 1)
{
return true;
}
}
function validate_user()
{
$this->db->where('u_name', $this->input->post('u_name'));
$this->db->where('p_word', md5($this->input->post('p_word')));
$query1 = $this->db->get('tb_user');
if($query1->num_rows == 1)
{
return true;
}
}
view
Code
<?php echo form_open(site_url('admin_all/validate_credentials'),array("name"=>"login","id"=>"login_form","onsubmit"=>"return chkFrm()")); ?>
<tr bgcolor='#F5F5F5'>
<td><IMG SRC="img/b_login.png" BORDER="0" ALT=""></td>
</tr>
<tr bgcolor='#F5F5F5'height='30'>
<td></td>
</tr>
<tr bgcolor='#F5F5F5'>
<td> ชื่อผู้ใช้งาน : <INPUT TYPE="text" NAME="u_name" size='18'></td>
</tr>
<tr bgcolor='#F5F5F5'height='8'>
<td></td>
</tr>
<tr bgcolor='#F3F3F3'>
<td> รหัสผ่าน : <INPUT TYPE="password" NAME="p_word" size ='18'></td>
</tr>
<tr height ='80' bgcolor='#F3F3F3'>
<td><INPUT TYPE="submit" value =' ตกลง '> <INPUT TYPE="reset" value =' ยกเลิก '></td>
</tr>
<?php echo form_close();?>
Date :
2011-10-18 11:37:31
By :
nidnoiiz
$data = array(
'u_name' => $this->input->post('u_name'),
'is_logged_in ' => true
);
$this->session->set_userdata($data);
if (!$this->session->userdata('logged_in '))
{
redirect('admin_all/login_form');
}
echo $this->session->userdata('logged_in ');
}
ค่าไม่ตรงกัน
Date :
2011-10-20 13:49:23
By :
mr.v
เปลี่ยนแล้ว แต่ก้อยังไม่ได้อยู่เหมือนเดิมอ่ะค่ะ ช่วยดูให้ที่น่ะค่ะ
Code
function index()
{
parent::Controller();
$this->load->library('session');
if (!$this->session->userdata('logged_in'))
{
redirect('admin_all/login_form');
}
echo $this->session->userdata('logged_in');
}
function login_form()
{
//echo "รหัสผ่านไม่ถูกต้อง";
$this->load->view('login1');
}
function validate_credentials() // Check textbox -------------------------User Login
{
$this->load->model('admin_model');
$query = $this->admin_model->validate();
$query1 = $this->admin_model->validate_user();
if($query)
{
$data = array(
'u_name' => $this->input->post('u_name'),
'logged_in' => true
);
$this->session->set_userdata($data);
redirect('admin_all/load_user');
}else if($query1){
$data1 = array(
'u_name' => $this->input->post('u_name'),
'logged_in' => true
);
$this->session->set_userdata($data1);
redirect('admin_all/load_page');
}else{
$this->index();
}
}
Date :
2011-10-24 10:37:14
By :
nidnoiiz
ข้างใน function validate_credentials() ไม่มีการ load library เลย ผมก็แปลกใจว่าไม่มี error เลยเหรอครับเพราะเรียกใช้ $this->session โดยไม่มีโหลด library session เลย
แล้ว session การกำหนดค่าเป็น boolean ให้มันกำหนดได้หรือเปล่าผมก็ไม่แน่ใจอีก ทำไมไม่ลองกำหนดเป็น string ธรรมดาๆไปล่ะ? อย่างเช่น 'yes', 'no', 'true', 'false'
if ( $this->session->userdata("logged_in") == 'true' ) {...}
และ parent::Controller(); เข้าใจว่าเป็นของเวอร์ชั่นเก่า 1.7.x มันน่าจะอยู่ใน function ที่เป็น construct ของ php4
อย่างเช่น class home function home (ถ้าเป็น php5 ก็ class home function __construct) ประมาณนี้
แล้วทำไมมันมาอยู่ใน function index() ??
ประวัติการแก้ไข 2011-10-24 11:41:05
Date :
2011-10-24 11:38:53
By :
mr.v
Code (PHP)
class test_session extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper(array("url"));
}
function index() {
$this->load->library("session");
$this->session->set_userdata("logged_in", "data in session");
echo "write session.<br />";
echo anchor("test_session/check", "check session");
}
function check() {
echo "check session page.<br />";
$this->load->library("session");
echo "[".$this->session->userdata("logged_in")."]<br />";
echo anchor("test_session", "go back");
}
}
ของ codeigniter 2.0+
ชื่อไฟล์ test_session.php สำหรับ controller
ลองเอาไปเทียบดูนะครับ
Date :
2011-10-24 17:16:22
By :
mr.v
ก้อยังทำไม่ได้อยู่ดีอ่ะค่ะ - -"
Date :
2011-12-13 14:35:43
By :
nidnoiiz
เอาโค้ดล่าสุดที่แก้มาครับ สองเดือนผ่านไปยังไม่ได้อีกหรือนี่?
Date :
2011-12-13 16:02:06
By :
mr.v
Load balance : Server 01