我有两个控制器。其中一个称为OAMLController
,另一个称为LoginController。我想在OAMLController
中设置HTTP Cookie,然后拨打LoginController
并在此控制器中读取它。
我知道如何在PHP中执行此操作,但我不知道如何在Zend Framework 2中执行此操作。
PHP(OAML.php):
setcookie("_ga", "GA1.2.1622977711.1433494392", 0, "/", "http://gnsys.local");
setcookie("_gat", "1", 0, "/", "http://gnsys.local");
header("Location: http://gnsys.local/publico/login.php");
PHP(login.php):
$cookie = "";
foreach (getallheaders() as $name => $value) {
echo "$name: $value</br>";
if ($name == "Cookie")
$cookie = $value;
}
我试图按照ZF2教程进行操作但是很混乱。
更多问题:
我已使用$ this-&gt; redirect() - &gt; toUrl($ url)重定向到其他控制器。
$cookie = new \Zend\Http\Header\SetCookie("param1", "Hola", null, null, "http://gnsys.local", null, null, null, null);
$this->getResponse()->getHeaders()->addHeader($cookie);
return $this->redirect()->toUrl("http://gnsys.local/publico/login");
因为如果我重定向:
$controllerName = "LoginController";
$actionName = "index";
return $this->redirect()->toRoute(
"publico",
array(
"controller" => $controllerName,
"action" => $actionName
));
我始终可以访问http://gnsys.local/publico而不是我想要的地方http://gnsys.local/publico/login。
另一个问题,在LoginController中我无法读取cookie。如果我通过Firebug检查cookie,我可以看到我在“.gnsys.local”域中创建了cookie而不是在“gnsys.local”域中创建了cookie。
为什么会这样?如果我使用toRoute或toUrl进行重定向,我会在同一个域“.gnsys.local”上创建cookie,而不是在“gnsys.local”中创建。
module.config:
'router' => array(
'routes' => array(
// The following is a route to simplify getting started creating
// new controllers and actions without needing to create a new
// module. Simply drop new controllers in, and you can access them
// using the path /application/:controller/:action
'publico' => array(
'type' => 'Literal',
'options' => array(
'route' => '/publico',
'defaults' => array(
'__NAMESPACE__' => 'Publico\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
更新2:
最后,重定向与Jangya Satapathy的解决方案完美配合。但我有一个新问题,这是我无法读取cookie,因为域名不正确。使用这些代码,我创建一个域名为“.gnsys.local”的cookie,而不是域名“gnsys.local”
$cookie = new \Zend\Http\Header\SetCookie("param1", "Hola", null, null, "http://gnsys.local", null, null, null, null);
$this->getResponse()->getHeaders()->addHeader($cookie);
$controllerName = "login";
$actionName = "index";
return $this->redirect()->toRoute(
"publico/default",
array(
"controller" => $controllerName,
"action" => $actionName
));
所以,当我尝试写入cookie“param1”的值时,我有下一个错误:
注意:未定义的索引:/var/www/html/gnsys/module/Publico/src/Publico/Controller/LoginController.php中的param1
如果我们用firebug检查cookie的值,我们有下一个屏幕截图:
我做错了什么?
更新3:
我不明白发生了什么,但getCookie为空。
getcookie IS NULL
print_r($ this-&gt; getRequest() - &gt; getCookie()); 不会写任何内容。
$getcookie = $this->getRequest()->getCookie(); // returns object of Zend\Http\Header\Cookie
if ($getcookie != null)
echo "getcookie is NOT NULL";
else
echo "getcookie IS NULL";
print_r($this->getRequest()->getCookie());
return new ViewModel();
已更新4:
我找到了cookie,但我找不到它的价值。为了找到cookie,我必须指出我将要阅读它的路径。
$cookie = new \Zend\Http\Header\SetCookie("param1", "Hola", 0, "/publico/login/index", "gnsys.local");
$this->getResponse()->getHeaders()->addHeader($cookie);
$controllerName = "login";
$actionName = "index";
return $this->redirect()->toRoute(
"publico/default",
array(
"controller" => $controllerName,
"action" => $actionName
));
而且,现在我有了退出......
getcookie不是空的
Zend \ Http \ Header \ Cookie对象([encodeValue:protected] =&gt; 1 [storage:ArrayObject:private] =&gt;数组([zdt-hidden] =&gt; 0))
如果我尝试通过
检索cookie的值$cookie = $getcookie->param1;
我有下一个错误......
注意:未定义的索引:第84行的/var/www/html/gnsys/module/Publico/src/Publico/Controller/LoginController.php中的param1
如果我尝试从$ getcookie获取所有值
foreach ($getcookie as $key => $value){
echo "Key: " . $key . " Value: " . $value . "<br />";
}
我已经......
键:zdt-hidden值:0
更新5:
我在这里什么都不懂。我不是用这些代码创建cookie的!
$cookie = new \Zend\Http\Header\SetCookie("param1", "Hola", 0, "/", "http://gnsys.local");
$this->getResponse()->getHeaders()->addHeader($cookie);
$controllerName = "login";
$actionName = "index";
return $this->redirect()->toRoute(
"publico/default",
array(
"controller" => $controllerName,
"action" => $actionName
));
使用firebug检查cookie我们看不到cookie。
答案 0 :(得分:1)
在您的Cookie设置操作中:
Public function cookiesetAction(){
$cookie = new \Zend\Http\Header\SetCookie($name, $value, $expires, $path, $domain, $secure, $httponly, $maxAge, $version);
$this->getResponse()->getHeaders()->addHeader($cookie);
return $this->redirect()->toRoute('cookieget'); //to your login controller
}
在你的cookie获取动作中:
public function cookiegetAction(){
$getcookie = $this->getRequest()->getCookie(); // returns object of Zend\Http\Header\Cookie
$getcookie->name1; // value1
$getcookie->name2; // value2
return new ViewModel();
}
关于cookies in ZF2的问题。
添加子路线,然后是主路线。
return $this->redirect()->toRoute('publicio/default',array(
'controller'=>$controllername,
'action'=>$actioname
));