如何在Zend框架1中获取布局中的会话值?

I want to access session values from layout.xml.

The code I did is

Layout.xml

<h2><?php  $myprofile=new Zend_Session('user_session');
  print $myprofile->username; ?> </h2>

Index Controller/index action

  $userid = $this->_user->getUserId($username,$password);
  $session = new Zend_Session_Namespace('user_session');
  $session->username = $username;
  $session->password = $password;
  $session->uid = $userid;
  $this->_redirect('home');

Home Controller/index action

$this->session = new Zend_Session_Namespace('user_session');
$this->view->uname = $this->session->username;

Home/index.phtml

<?php echo "The User Name is ".$this->uname?>

But it shows an error

Fatal error: Call to protected Zend_Session::__construct() from context 'Zend_View' in/var/www/shoppingcart/application/layouts/scripts/layout.phtml on line 19

I am able to get the session values in Home/index.html.

Expecting positive help.

Why using Zend_Session in the layout and Zend_Session_Namespace in the view ? also maybe you should'n use sessions in the view/layout but pass it as param from the controller or the bootstrap file

I agree with Amine here, putting the Zend_Session in the view script is generally considered bad practice. I would indeed put it in the bootstrap as well, something like the following...

// Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    public function _initUserSession()
    {
        // If not already done, bootstrap the view
        $this->bootstrap('view');
        $view = $this->getResource('view');

        // Initialise the session
        $session = new Zend_Session_Namespace('user_session');

        // See if the username has been set, and if not at 
        // least make the variable
        if (isset($session->username)
            $view->username = $session->username;
        else
            $view->username = null;       
    }
}

Then in the layout you can do this:

<?php if ($this->username !== null) : ?>
   The User Name is <?php echo $this->username ?>
<?php else : ?>
   No username has been set.
<?php endif; ?>