我正在尝试在当前会话中保存URL参数值和cookie。我创建了一个从controller_front_send_response_before
事件中触发的观察器,因为我希望它在每个页面上执行,以防万一提供了一个新值来替代前一个值。
这是我的观察者:
class Acme_Save_Model_Observer
{
public function eventHandler($observer)
{
$request = $observer->getEvent()->getData("front")->getRequest();
$id = $request->id;
if ( isset($id) && !is_null($id) ) {
$_SESSION["id"] = $id;
$period = 1209600; // 60s * 60m * 24h * 14d
Mage::getModel('core/cookie')->set('id',$id,$period);
Mage::log("ID value $id set in session+cookie");
} else {
$id = Mage::getModel('core/cookie')->get('id');
Mage::log("ID cookie value: $id" );
if ( isset($id) && !is_null($id) ) {
$_SESSION["id"] = $id;
}
}
Mage::log("ID session value: " . $_SESSION["id"] );
}
}
当我用http://acme.com/?id=blort
调用它时,system.log显示它已被设置:
DEBUG (7): ID value blort set in session+cookie
DEBUG (7): ID session value: blort
奇怪的是,从这一点开始,即使新的请求URL不包含该参数,每次都会记录相同的消息。单击页面上的另一个链接或仅输入http://acme.com/
会在上面记录相同的 set 消息,而不是在else子句中显示与我一样的“ ID cookie值:blort ”没有查询字符串的请求将会期望。我在这里缺少明显的东西还是不了解?任何帮助或建议表示赞赏。