I am facing for the first time a new issue with session destroy. Before today when I would click on the logout using this:
function logout()
{
$this->session->unset_userdata("logged_in");
$this->session->sess_destroy();
redirect(base_url(), 'refresh');
}
That session was easily destroyed, but today it is not working. This is the code where I start the session.
function checkDataBase()
{
$this->load->library('session');
$email = $this->input->post('email');
$password = $this->input->post('password');
$result = $this->login_model->contractor_login($email, $password);
// die;
// echo "<pre>";print_r($result);die;
if ($result) {
if (isset($_POST['remember'])) {
$this->input->set_cookie('email', $_POST['email'], 3600);
$this->input->set_cookie('password', $_POST['password'], 3600);
}
foreach ($result as $row);
$role_id = 2;
$session_data = array(
'id' => $row->id,
'name' => $row->name,
'country_id' =>$row->country_id,
'category_id' =>$row->category_id,
'company_name' =>$row->company_name,
'email' =>$row->email,
'address1' =>$row->address1,
'counties' =>$row->counties,
'phone_number' =>$row->phone_number,
//'business_status' =>$business_status,
'role_id' => $role_id
);
$this->session->set_userdata('logged_in', $session_data);
return TRUE;
} else {
$this->session->set_flashdata('message', 'Wrong Username or Password');
redirect("contractor/login");
}
}
From the Codeigniter Session Class documentation, regarding Flashdata we can read:
CodeIgniter supports "flashdata", or session data that will only be available for the next server request, and are then automatically cleared. Your problem might be that when you redirect, the process takes more than one request, clearing your flashdata.
To see if that's the case, just add the following code to the constructor of the controller you are redirecting to:
$this->session->keep_flashdata('message');
This will keep the flashdata for another server request, allowing it to be used afterwards.
I got the solution of the session destroy. Actually the problem was my browser creating the cache that's why I thought session is not destroyed. When I researched then I got the solution of my problem.
Here is a linked where I found the solution.
http://www.robertmullaney.com/2011/08/13/disable-browser-cache-easily-with-codeigniter/ I
I created a new file into “application/libraries”
using this code
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Output extends CI_Output {
function nocache()
{
$this->set_header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
$this->set_header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0');
$this->set_header('Cache-Control: post-check=0, pre-check=0', FALSE);
$this->set_header('Pragma: no-cache');
}
}
/* End of File */
Then I called nocache(); function into the controller's constrctor
$this->output->nocache();
The problem has been solved.