public function action_login() {
        $this->template->title = 'login';
        $this->template->content = View::factory('welcome/index');
        $data = null;
        if (Input::method() == 'POST') {
            if (!Security::check_token()) {
                Session::set_flash('error', 'the form has expired please refresh the page and try again');
                return false;
            }
            $val = Validation::factory('login');
            $val->add('email')->add_rule('valid_email')->add_rule('required')->add_rule('min_length', 3);
            $val->add('password')->add_rule('required')->add_rule('min_length', 8);
            if (Input::method() == 'POST' && $val->run()) {
                $password = Input::post('password');
                $email = Input::post('email');
                $user = Model_User::find()
                        ->related('admin')
                        ->where('email', $email)
                        ->get_one();
                if (!$user) {
                    Session::set_flash('error', 'invalid email / password combo');
                    return false;
                }
                $session = Session::create();
                if ($user->login($password) == true) {
                    $session->set('user_id', $user->id);
                    $session->set('authenticated', true);
                    if ($user->timezone) {
                        $session->set('timezone', $user->timezone);
                    }
                    if ($user->admin) {
                        $session->set('admin', true);
                    }
                    Response::redirect('home');
                    return;
                }
            } else {
                $data['errors'] = $val->errors();
                Session::set_flash('error', 'invalid email / password combo');
                return false;
            }
        }
    }
class Controller_Session extends Controller {
    public $template = 'maintemplate';
    public $auto_render = true;
    public $user_id;
    public $admin = false;
    // Load the template and create the $this->template object
    public function before($data = null) {
        $session = Session::instance();
        if ($session->get('authenticated') == false || $session->get('user_id') == null) {
            Response::redirect('welcome/index');
            return true;
        }
        $this->user_id = $session->get('user_id');
        if ($session->get('admin') == true) {
            $this->admin = true;
        }
}
 public function action_logout() {
        $session = Session::instance();
        $session->set('authenticated', false);
        $session->set('admin', null);
        $session->set('user_id', null);
        Response::redirect('welcome/index');
        return true;
    }
// reset the stored session data $this->keys = $this->flash = $this->data = array();The static methods all use "Session::instance()", the default session. Which should be the same as calling a dynamic method on the default instance. If you are using static calls everywhere, why not use Session::destroy() in your logout method? And check if you have auto_initialize on in your config. If so, you don't need to create a session, it will be created automatically when you load the Session class. In this case, a manual create just creates a new session (which for example in case of the db driver, doubles the number of session records!).
public function action_logout() {
        Session::delete('authenticated');
        Session::delete('admin');
        Session::delete('user_id');
        Response::redirect('welcome/index');
        
        return true;
    }
Brian Perin wrote on Friday 21st of October 2011:I changed all session getters/setters to static calls and its the same. This is probably a better methodpublic function action_logout() { Session::delete('authenticated'); Session::delete('admin'); Session::delete('user_id'); Response::redirect('welcome/index'); return true; }
But still if I throw in Session::destroy() call , those variables seem to come back some how and I'll get bounced back to the session controller like the user is still logged in. I don't really get whats going on. The above works fine, I just don't understand why Session::destroy() isn't destroying the variables.
Session::set()will use the default session instance, whereas if you use
$session = Session::instance('blah');
it will grab the 'blah' session instance, which can be completely different.
Is there a particular reason you aren't using the Auth package? It's extremely flexible.		It looks like you're new here. If you want to get involved, click one of these buttons!