/ / Zend Cookie Problem - Zend-Framework, Plugins, Cookies, mehrsprachig

Zend Cookie Problem - Zend-Framework, Plugins, Cookies, mehrsprachig

Ich arbeite an einer Zend 1.11-Webapp. Ich habe ein Sprachauswahl-Plugin zum Wechseln der Sprache (it & en) je nach Benutzereingabe entwickelt.

Das habe ich:

class LS_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract
{

public function preDispatch(Zend_Controller_Request_Abstract $request)
{


if($request->getParam("lang"))
{
$lang=$request->getParam("lang");
setcookie("lang", $lang, time() + (3600));
echo "we just set a cookie";
}
else if (isset($_COOKIE["lang"]))
{
$lang=$_COOKIE["lang"];
echo $lang;
}
else
{   echo "We are here.But I can"t understand why";
$lang="en";
var_dump($_COOKIE);
}

switch(strtolower($lang))
{
case "en":
$locale="en_US";
break;

case "it":
$locale="it_IT";
break;

default:
$locale="en_US";
}

$zl=new Zend_Locale();
$zl->setLocale($locale);

Zend_Registry::set("Zend_Locale",$zl);



$translate=new Zend_Translate(
array(
"adapter" => "gettext",
"content" => APPLICATION_PATH."/configs/languages/".$locale.".mo",
"locale"  => "en"
)

);

Zend_Registry::set("Zend_Translate",$translate);
}

}

[bootstrap.php]

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function _initRoutes()
{

$frontController=Zend_Controller_Front::getInstance();
$router=$frontController->getRouter();
$router->removeDefaultRoutes();
$router->setGlobalParam("lang","en");
$router->addRoute(
"lang",
new Zend_Controller_Router_Route("/:lang/:controller/:action",
array("lang"=>":lang",
"module"=>"default",
"controller"=>"index",
"action"=>"index"

)

)
);


$router->addRoute(
"langController",
new Zend_Controller_Router_Route("/:controller/:action",
array(
"module"=>"default",
"controller"=>"index",
"action"=>"index"
)

)
);

$router->addRoute(
"langIndex",
new Zend_Controller_Router_Route("/:lang",
array("lang"=>":lang",
"module"=>"default",
"controller"=>"index",
"action"=>"index"
)

)
);

$router->addRoute(
"langNothing",
new Zend_Controller_Router_Route("",
array("lang"=>"en",
"module"=>"default",
"controller"=>"index",
"action"=>"index"
)

)
);

}
}

Der Punkt ist, dass:

  • Ich gebe in meinem Browser die vollständige URL meiner Site ein.com / it / index / index und ich bekomme ein Echo heraus "wir haben nur einen Cookie gesetzt" .. was gut ist, ich sollte in der Lage sein, meine Website mit dem italienischen Cookie-Set zu durchsuchen, aber ich tue es nicht. Bsp. /Index/contactus..links geben den Parameter "lang" nicht an!) Ich navigiere zu dieser Seite, aber es ist wieder in Englisch (ich bekomme die Nachricht: "we are here", aber ich kann es nicht verstehen Warum").

Sollte der Cookie nicht gesetzt werden?

Antworten:

2 für die Antwort № 1

Das Problem ist, dass Sie das nicht angeben Pfad für deinen Keks So wird es für die eingestellt aktuelle Seite nur.

Wenn Sie zu einer anderen (Unter-) Site navigieren, ist Ihr Cookie für diesen Pfad nicht gültig und wird nicht übertragen. Sie sollten Ihren Lang-Cookie auf den Pfad "/" setzen.

Sehen Setcookie () Dokumentation:

Der Pfad auf dem Server, in dem der Cookie gespeichert werden sollauf verfügbar sein. Bei der Einstellung "/" ist der Cookie in der gesamten Domäne verfügbar. Bei der Einstellung "/ foo /" ist der Cookie nur im Verzeichnis / foo / und allen Unterverzeichnissen wie / foo / bar / der Domäne verfügbar. Der Standardwert ist das aktuelle Verzeichnis dass der Cookie gesetzt wird.