Search code examples
phpsessionflash-message

PHP when to remove session flash message


I have my own MVC and in my BaseController i create simple method flashMessage.

public function flashMessage($name, $value)
{
    if(!isset($_SESSION['message'][$name])) {
        $_SESSION['message'][$name] = $value;
    }
}

This work good but i dont know when to destroy this session. Is good idea to put in __destructor session_unset($_SESSION['message']); ?

This work good but my message has no lifetime

    public function authenticate()
    {

        if(isset($_POST['submit']))
        {
            $username = $this->inputFilter($_POST['username']);
            $password = $this->inputFilter($_POST['password']);

            // check if user exist
            if(!$this->auth->autheticate($username, $password)) {
                $this->flashMessage('error', 'Error: Invalid username or password!');

                return $this->redirect('login');
            }else {
                $this->flashMessage('success', 'Success: Uspešno ste se prijavili na sistem!');
                return $this->redirect('home');
            }

         }
    }

Solution

  • You remove it on read. A simple example, by making the flash message a class.

    class FlashMessage
    {
    
        static function create($name, $value)
        {
            if(!isset($_SESSION['message'][$name])) {
                $_SESSION['message'][$name] = $value;
            }
    
        }
    
        static function read($name)
        {
            if(isset($_SESSION['message'][$name])) {
                $message = $_SESSION['message'][$name];
                unset($_SESSION['message'][$name]);
                return $message;
            }
            //return null, false or throw exception
    
        }
    }