1

I am fairly new and just started to use Codeigniter, and have come across some confusion regarding sessions.

What I want to achieve is, like in regular php, I want to check if a user is logged in by using a header include file which checks the session data. I dont want to check/write that checking code in every controller while passing data to the view file.

Can someone please show me how it can be done?

Ex. I don't want to do the following in every controller:

//Controller:
if($this->session->userdata('loggedin'){
$data['loggedin'] = $this->session->userdata('loggedin');
}
//I dont want to check the above on every function in every controller
$this->load->view('some_view_file', $data);

//some_view_file
if(isset($loggedin)){
echo "You are logged in!";
}
else
{
echo "Please log in!";
}

Instead, I want something to like the following:

//some view file
if(isset($loggedin))
{
echo "your logged in";
}
else
{
echo "please log in";
}

And also, how can I use native php sessions instead of CI Sessions. Any help will be much appreciated. Thanks.

2 Answers 2

7

Firstly, theres no reason you can't just write something like this in your view:

<? echo ($this->session->userdata('loggedin')) ? "Logged In": "Not Logged In"; ?>

Then your controllers don't need any of that code.

However if the check is more complex or something, then theres a few places you can do it.

1) In the constructor of a custom controller: create a new file application/core/MY_Controller.php, and override the constructor with something like:

class MY_Controller extends CI_Controller 
{
    public function __construct() 
    {
        parent::__construct();
        if($this->session->userdata("loggedin")) {
            // do something
        }
    }
}

then make all your controllers extend MY_Controller.

2) Or in a post_controller_constructor hook. http://codeigniter.com/user_guide/general/hooks.html (this is more transparent, and probably easier if you have tons of controllers already)

You can use native sessions with this: http://codeigniter.com/wiki/Native_session/

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much. I think I got it working with the MY_Controller
0

I think using a construct on your controller would be the smartest approach.

I also recommend encrypting your session cookie.


class Blog extends CI_Controller {

       public function __construct()
       {
            parent::__construct();
            //always check if session userdata value "logged_in" is not true
            if(!$this->session->userdata("logged_in"))
            {
                 redirect('login');
            }

       }
}

1 Comment

Thanks for the response.. it worked like all of you said in here.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.