หากต้องการจะให้โชว์ข้อความหน้าที่เราจะ 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
After
ใครที่เจอปัญหาคล้ายๆ กันก็ลองเอาไปใช้ดูครับแต่พบปัญหากรณีที่ 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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น