วันเสาร์ที่ 5 กรกฎาคม พ.ศ. 2557

Codeigniter แก้ปัญหาการใช้ set_flashdata ไม่ได้ ก่อน redirect

หากต้องการจะให้โชว์ข้อความหน้าที่เราจะ redirect กลับไป ผมจะใช้ set_falshdata เพื่อเก็บข้อมูลซักอย่างลงใน session
แต่พบปัญหากรณีที่ login ผ่านแล้วผมเช็ค ip ที่ต้องการจะให้ใช้งานต่อ หากไม่ใช่ ip ที่มีอยู่ในระบบ จะทำการเคลียร์ session แล้ว redirect กลับไป

จังหวะที่เคลียร์ session ผมก็ใช้ set_falshdata และ redirect ไปปกติ แต่เพจที่ redirect กับไม่พบ session ที่เราสร้าง falshdata เอาไว้

หลังจากค้นหาข้อมูลอยู่นาน ก็พบว่า จังหวะที่เคลียร์เซสชั่น $this->session->sess_destroy();
แล้วใช้ $this->session->set_flashdata('error', '...'); ไม่สามารถใช้ได้ เพราะเซสชั่นเราถูกเคลียร์ไปหมดแล้ว

ปัญหานี้แก้โดยใช้
$this->session->sess_read()
$this->session->sess_create()
เพื่อเช็คว่า session สามารถใช้งานได้หรือไม่ หากไม่ได้ก็เปิดใช้ session ใหม่

สรุปที่พล่ามมาทั้งหมด โค้ดที่ใช้จะประมาณนี้

Before

$this->session->sess_destroy();
$this->session->set_flashdata('error', 'your ip don\'t permission');
redirect('home/login');

After

$this->session->sess_destroy();
if(!$this->session->sess_read())
{
$this->session->sess_create();
}

$this->session->set_flashdata('error', 'your ip don\'t permission');
redirect('home/login');
ใครที่เจอปัญหาคล้ายๆ กันก็ลองเอาไปใช้ดูครับ
อ้างอิงค์ flashdata not being stored between redirects when using Tank Auth

ไม่มีความคิดเห็น:

แสดงความคิดเห็น