Welcome Guest, Not a member yet? Register   Sign In
Session between controllers
#1

[eluser]ping timeout[/eluser]
Hello,
I started an application with CI. I've made Controllers for the registration page, activation, login and user pages.
In my controllers/login.php function index(); I have someting like:
Code:
//code
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('login');
        }        
        else
        {    
            $time = time();
            $agent = $this->input->user_agent();    
            $username = array('username' => set_value('username'), 'logged_in' => TRUE);        
            $this->session->set_userdata($username);
            
            $this->load->view('personal');          
        }
And in views/personal.php
Code:
<h1>Hello &lt;?php echo $this->session->userdata('username'); ?&gt;</h1>
&lt;?php if ($this->session->userdata('logged_in')==TRUE) echo anchor('register', 'Register'); ?&gt;
This works ok it shows both my username and the anchor, but if I change the url or click on the link from the anchor it redirects me to the register page where I have
Code:
function _is_logged_in()
    {
        if ($this->session->userdata('logged_in')==TRUE)
            $this->load->view('personal');
        return TRUE;
    }
And it doesn't do anything, also it doesn't know the username...
I tested a few times, with both database session and cookie sessions, and with bot autoload session library and manual load... What can I do?
#2

[eluser]Ben Edmunds[/eluser]
Try setting the session variables individually and then echoing directly after to see if it's even getting set at all.
#3

[eluser]ping timeout[/eluser]
I've changed my code:
Code:
//$username = array('username' => set_value('username'), 'logged_in' => TRUE);        
            //$this->session->set_userdata($username);
            $this->session->set_userdata('username',set_value('username'));
            $this->session->set_userdata('logged_in',TRUE);
            echo $this->session->set_userdata('username');
            //$this->load->view('personal');          
        }
And it just shows a blank page.
And if I let this:
Code:
//echo $this->session->set_userdata('username');
            $this->load->view('personal');
It shows the Hello $username message and anchor.
I've tested with:
Code:
echo $this->session->set_userdata('username');
            $this->load->view('personal');
And the message is just Hello, no $username or anchor.
#4

[eluser]Ben Edmunds[/eluser]
OK, just do this in your controller

Code:
$this->session->set_userdata('username','test');
$this->session->set_userdata('logged_in',TRUE);

echo $this->session->userdata('username') . " - logged_in=" . $this->session->userdata('logged_in');

What do you get?
#5

[eluser]ping timeout[/eluser]
I get:
test - logged_in=1
#6

[eluser]Ben Edmunds[/eluser]
Problem solved.

Looks like set_value('username') doesn't contain anything and instead of checking for logged_in == TRUE just check for logged_in:

Code:
function _is_logged_in()
{
   if ($this->session->userdata('logged_in')) {
      $this->load->view('personal');
      return true;
   }
   else {
   return false;
   }
}
#7

[eluser]ping timeout[/eluser]
NO, it's not because of set_value(‘username’) - because it has the right value( no form validation errors) and anyway I changed the code to:
Code:
$this->session->set_userdata('username','test');
        $this->session->set_userdata('logged_in',TRUE);
        $this->load->view('personal');
And in views/personal I have
Code:
<h1>Hello &lt;?php echo $this->session->userdata('username'); $username=$this->session->userdata('username'); ?&gt;</h1
&lt;?php echo anchor('personal/user', 'User'); ?&gt;
In controller personal, function user I have:
Code:
function user()
    {
        $this->load->view('personal_user');
    }
views/personal_user:
Code:
<h1>Hello &lt;?php echo $this->session->userdata('username'); $username=$this->session->userdata('username'); ?&gt;</h1
&lt;?php echo anchor('personal', 'Personal'); ?&gt;

In personal I see Hello test, when I click on User, I get only Hello.

I don't get it, anything (captcha, email, form validation...) works fine till here...

Also noticed something:

I've changed my code and it looks like this:
Code:
class Personal extends Controller
{
    function __construct()
    {
        parent::__construct();
    }
    function index()
    {
        $this->_is_logged_in('personal');
    }
    function user()
    {
        $this->_is_logged_in('personal_user');
    }
    function _is_logged_in($link)
    {
        if ($this->session->userdata('logged_in')===TRUE)
            $this->load->view($link);
        $this->load->view('login');
    }
}

1. index.php/personal shows views/login
2. index.php/personal/ shows views/login
3. index.php/personal/user shows views/personal_user only for IE, in FF it shows login
4. index.php/personal/user/ shows views/login
#8

[eluser]InsiteFX[/eluser]
Change logged_in = 1 not true logged_out set to 0

Enjoy
InsiteFX




Theme © iAndrew 2016 - Forum software by © MyBB