[symfony-es] Problemas con ajax y sesion

91 views
Skip to first unread message

lmdes

unread,
May 2, 2010, 8:08:05 PM5/2/10
to symfony-es
Tengo un pequeño problema al utilizar ajax. Resulta que tengo un
metodo actualizarDivPrueba(), que es invocado mediante ajax. Este
metodo actualiza un parte de la pantalla que se encuentra en la
pagina. El probema ocurre cuando la sesion sesion se termina por
tiempo de inactividad, y yo invoco a ese metodo, el formulario de
login (pantalla de login) me aparece dentro de esa porcion de la
pagina que actualiza, cuando en realidad el metodo deberia redirigirme
a la pantalla completa de login. Alguna ayuda????

Estoy usando sfGuardPlugin

Saludos

--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a symfony-es+...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/symfony-es?hl=es.

lmdes

unread,
May 7, 2010, 12:01:59 AM5/7/10
to symfony-es
Generalizando un poco mas el problema, en cualquier metodo ajax, si la
sesion "expiro" la ventana de login se muestra dentro del div que
actualizaba dicho metodo, cuando en realidad deberia, redirigirme a la
pantalla completa de login.... alguna sugerencia?

Rigoberto Reyes

unread,
May 7, 2010, 10:33:41 AM5/7/10
to symfo...@googlegroups.com
valida si esta autenticado en el action de ajax y si no esta autenticado redirige todo a login...

2010/5/6 lmdes <lobit...@hotmail.com>

Rodrigo Ruiz

unread,
May 7, 2010, 12:46:53 PM5/7/10
to symfo...@googlegroups.com
El 02/05/2010 20:08, lmdes escribió:
> Tengo un pequeño problema al utilizar ajax. Resulta que tengo un
> metodo actualizarDivPrueba(), que es invocado mediante ajax. Este
> metodo actualiza un parte de la pantalla que se encuentra en la
> pagina. El probema ocurre cuando la sesion sesion se termina por
> tiempo de inactividad, y yo invoco a ese metodo, el formulario de
> login (pantalla de login) me aparece dentro de esa porcion de la
> pagina que actualiza, cuando en realidad el metodo deberia redirigirme
> a la pantalla completa de login. Alguna ayuda????
>
> Estoy usando sfGuardPlugin
>
> Saludos
>
>

En el signinSuccess.php antes del formulario:

<?php
if ($sf_request->isXmlHttpRequest()):
header('HTTP/1.0 401 Unauthorized');
echo "<script
type='text/javascript'>top.location.href='".$sf_request->getUri()."'</script>";
exit();
endif;
?>


--
Rodrigo Ruiz Fuentes

Rigoberto Reyes

unread,
May 7, 2010, 12:54:36 PM5/7/10
to symfo...@googlegroups.com
o tambien usar un if  ( ! $user->isAuthenticated() ) $this->redirect...

2010/5/7 Rodrigo Ruiz <rru...@gmail.com>

Rodrigo Ruiz

unread,
May 7, 2010, 1:19:19 PM5/7/10
to symfo...@googlegroups.com
El 07/05/2010 12:54, Rigoberto Reyes escribió:
o tambien usar un if  ( ! $user->isAuthenticated() ) $this->redirect...

[...]
 

En el signinSuccess.php antes del formulario:

<?php
if ($sf_request->isXmlHttpRequest()):
   header('HTTP/1.0 401 Unauthorized');
   echo "<script type='text/javascript'>top.location.href='".$sf_request->getUri()."'</script>";
   exit();
endif;
?>


--
Rodrigo Ruiz Fuentes


Yo intenté eso hace un tiempo atrás, quería dejarlo en el action, pero nunca me funcionó el redirect, ni forward, siempre quedaba el login en el div a actualizar con ajax, finalmente la solución que entrego es lo único que funcionó.
La idea, para mejorar el asunto, era, el el actions.class.php, en el módulo sfGuardAuth copiado a la aplicación:

public function executeSignin()
{
    $this->redirectIf($this->getRequest()->isXmlHttpRequest(), '@sf_guard_signin');

    parent::executeSignin();
}

Con eso debería bastar, consultamos si se está intentando 'mostrar' en login form desde una llamada ajax, entonces redirigimos a la ruta de signin del sfGuard.

Saludos.-

-- 
Rodrigo Ruiz Fuentes

sem

unread,
May 10, 2010, 10:25:47 AM5/10/10
to symfony-es
Hola

A mi en symfony 1.0 utilizando los propios helpers de symfony no me
llego a funcionar!; pero tampoco le dedique mucho tiempo.
Ahora que estoy con symfony 1.4, y que utilizo jquery, lo he echo de
la siguiente forma, pero sin utilizar el plugin de sfGuard, pero
entiendo que podrás aplicarlo de todas formas.

En mi llamada al logueo, incluyo lo siguiente:

if ($this->getRequest()->isXmlHttpRequest())
{
// response to the ajax request : code http 401 (access
unauthorized)
$this->getResponse()->setStatusCode(404);
}

Entonces devuelve un error al ajax, y en el ajax hago la redireccion
al login.

function accion()
{
var peticion = $.ajax({
async: true,
url: '/modulo/accion',
type: 'POST',
data: {},
success: function(html){
$("#capa").html(html);
},
error: function(html){
document.location.href='./';
}
});
}

Espero que te sirva!!!!

sem

unread,
May 14, 2010, 4:10:46 AM5/14/10
to symfony-es
Hola a todos,

Un querido compañero me comento sobre este tema el siguiente problema,
que si tiene muchos ajax, tiene que andar cambiandolos en todos, asi
que mire para hacerlos directamente en el actions del login, y la
conclusion es la siguiente:


En la llamada al ajax, lo dejamos como hasta mas o menos ahora lo
tenia todo el mundo, sin del location:

function accion()
{
var peticion = $.ajax({
async: true,
url: '/modulo/accion',
type: 'POST',
data: {},
success: function(html){
$("#capa").html(html);
},
error: function(html){
/* document.location.href='./'; */
}
});

}

Y ahora en la acción del login, si entra cuando viene de ajax es
porque no estas logueado, en vez de indicarle que es un error, le
vamos indicar que me devuelva a la capa de la llamada del ajax un
javascript donde redirigo al raiz, por lo que al redirigir y no estar
logueado, me pasa directamente a la pagina de logueo.

if ($this->getRequest()->isXmlHttpRequest())
{
return $this->renderText('<script language="JavaScript" type="text/
javascript">location.href="./"</script>');
}

No es tan bonita como la anterior, pero seguro que tiene menos
quebraderos de cabeza!!!

Un saludo!

sem

unread,
May 14, 2010, 4:51:17 AM5/14/10
to symfony-es
Hola otra vez,

Bueno!, ya que me he puesto he probado en symfony1.0 y funciona
tambien, pero si utilizais los helpers de symfony para ajax, recordad
poner la siguiente sentencia en el ajax:

'script' => true

Porque sino, no reconoce el scritp de redireccionar.

Por cierto, tambien podeis utilizar window.location en vez de
location.href.
Reply all
Reply to author
Forward
0 new messages