session_start - variables de session php ejemplo
Redirigir a una nueva página con datos POST(PHP/Zend) (6)
Debido a que el cliente maneja la redirección después de la respuesta del servidor, no creo que pueda hacer mucho al respecto. Firefox, por ejemplo, le pregunta al usuario si desea volver a enviar los datos POST a la nueva ubicación o no.
Una solución desagradable sería llenar y devolver un formulario HTML y enviarlo automáticamente con JavaScript. : /
Estoy tratando de descubrir cómo redirigir a una nueva página (aplicación, controlador, acción) y mantener los datos POST actuales.
Mi aplicación está validando los datos POST y si se cumplen ciertos criterios, quiero redirigir a una ubicación diferente, pero asegúrese de que los datos POST se pasen como datos POST a esa página nueva. Aquí hay un ejemplo aproximado:
POST /app1/example HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
var1=foo&var2=bar
En mi exampleAction
(Zend_Controller_Action), exampleAction
si var1 == foo
, y si lo hago quiero redireccionar (302) a / app2 / example con los mismos datos POST. Algo así como esto?
HTTP/1.x 302 Found
Location: /app2/example
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
var1=foo&var2=bar
Puedo ver cómo crear una nueva solicitud HTTP usando Zend_Http_Client, pero no estoy buscando simplemente solicitar la página y mostrar el contenido. ¿Debo seguir buscando utilizar Zend_Http_Client de todos modos? En este momento estoy jugando con cosas como esta:
$this->getResponse()->setRedirect(''/app2/example/'', 302);
$this->getResponse()->setBody(http_build_query($this->_request->getPost()));
Estoy seguro de que lo que quiero hacer es posible a través de engaños y cavorting de demonios, pero definitivamente me está aludiendo. Cualquier ayuda es apreciada.
- rk
En lugar de redirigir el navegador a la nueva ubicación, ¿por qué no reenviar la solicitud del controlador al otro controlador?
return $this->_forward("action", "controller", "module");
IMO no puede hacer una redirección con POST. Ver http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3
Como ya se dijo, podría guardar sus datos POST en la sesión.
No estoy muy familiarizado con Zend específicamente, pero hay dos enfoques que tomaría para su problema:
- Almacene los datos POST en la sesión durante la vida de esa solicitud / redirección
- Establezca la redirección para que sea una POST y codifique los datos. En lugar de usar la redirección, simplemente envíe un nuevo encabezado con POST en lugar de GET.
Puede usar el helper de acción de redirector:
Esto es trabajo para mí. Está pasando las credenciales de inicio de sesión de una pantalla de inicio de sesión a otra. El 307 puede hacer que el navegador advierta al usuario que se está produciendo el redireccionamiento, un 303 redireccionará y rellenará las credenciales en la página siguiente, pero no enviará el segundo formulario.
$baseUrl = ''https://example.com'';
$this->_redirector = $this->_helper->getHelper(''Redirector'');
$this->_redirector->setCode(307)
->setUseAbsoluteUri(true)
->gotoUrl($baseUrl . ''/home/login'',
array(''username'' => $authForm->getValue(''username''),
''password'' => $authForm->getValue(''password'')
)
);
Puede usar un objeto _request del controlador
$this->_request->setPost(array(
''someKey'' => ''someValue''
));
Y luego simplemente use el _forward protected method
$this->_forward(''yourAction'', ''yourController'', ''yourModule'');
Luego, en acción de controlador reenviado simplemente llame
$aPost = $this->_request->getPost();