When you are working with sessions, you might have the problem, that your message is not shown.

## First add them

We have different sessions:

• core
• checkout
• sales
• customer
• a lot more.

For each of these sessions, we have four methods to add a message:

Mage::getSingleton('*/session')->addSuccess('Woho! It worked!');
Mage::getSingleton('*/session')->addError('Something went horribly wrong!');


## And now get them

Getting the message is easy, get the right session and call getMessages():

public function getMessages($clear=false) Mage::getSingleton('core/session')->getMessages(true)  The parameter decides whether the messages are deleted or not. ## The problem The message block <block type="core/messages" name="global_messages" as="global_messages"/> <block type="core/messages" name="messages" as="messages"/>  loads only the messages of core/session: app/code/core/Mage/Core/Block/Messages.php:79 public function _prepareLayout() {$this->addMessages(Mage::getSingleton('core/session')->getMessages(true));
parent::_prepareLayout();
}


There are a few places, where other session are loaded, e.g. \Mage_Cms_Helper_Page::_renderPage:

foreach (array('catalog/session', 'checkout/session', 'customer/session') as $storageType) {$storage = Mage::getSingleton($storageType); if ($storage) {
$messageBlock->addStorageType($storageType);
$messageBlock->addMessages($storage->getMessages(true));
}
}


But unfortunately not on the product view.

## The solution

In my last project we already had an observer which makes sure, that the customer is redirected after sending a contact form, therefore we used the same method to just rewrite the message to the "correct" session.

$customerSession = Mage::getSingleton('customer/session');$coreSession = Mage::getSingleton('core/session');
foreach ($customerSession->getMessages()->getItems() as$message) {
$coreSession->addMessage($message);
}