Problema con Ajax y la autentificación en las sesiones expiradas

301 views
Skip to first unread message

Fran

unread,
Aug 14, 2009, 9:23:28 PM8/14/09
to symfony-es
Buenas,

Estoy realizando una parte de mi aplicación con ajax, casi todas las
peticiones lo que hacen es cargar en un div las respuestas. La
cuestión es que si expira la sesión y hago una petición ajax lo que
hace es recargar en ese div el registro de autenticación.

He estado mirando y he encontrado esto:
http://forum.symfony-project.org/index.php/m/76407/
pero no me convence mucho.

Alguien sabe o se le ocurre alguna forma de resolver esto?

Saludos y gracias,

Fran

Kailash

unread,
Aug 15, 2009, 6:49:07 AM8/15/09
to symfony-es
Podrías evitar que caduque la sesión haciendo peticiones periodicas
vía javascript al server; un keepalive fácil de montar con un timeout
que peticione una página cualquiera y para no cargar mucho, esta no
devuelva contenido.

Fran

unread,
Aug 15, 2009, 7:45:54 AM8/15/09
to symfony-es
Gracias por responder,
No se me había ocurrido esa opción, pero me gustaría que sí que
caducara , lo que había pensado es en la acción signin de sfGuardAuth
que al comprobar que la petición es de tipo pues haga una redirección
que no sólo afecte al div donde se envía la respuesta.

Carlos Martínez

unread,
Aug 16, 2009, 10:50:47 PM8/16/09
to symfo...@googlegroups.com
Yo estoy intentando hacer lo mismo, leyendo los links que dejaron hice lo siguiente:

# plugins\sfGuardPlugin\modules\sfGuardAuth\templates\signinSuccess.php

<?php use_helper('Javascript');?>

<?php use_helper('Asset');?>

<?php if($sf_request->isXmlHttpRequest()): ?>

   <?php /*use_javascript('redirect') */ ?>

   <script type="text/javascript">
         function redireccionar(url)
         {
               window.location.href=url;
         }
   
         setTimeout(redireccionar('http://sgcj/estudio_dev.php/'), 0); 

   </script>

<?php else: ?>
<form action="<?php echo url_for('@sf_guard_signin') ?>" method="post">
<h2 style="text-align:center;">Ingreso a SfCob</h2>
  <table>
      <tbody>
          <tr>
              <th>Usuario</th>
              <td><?php echo $form['username'] ?></td>

....

Lamentablemente eso no me funciona, porque al inspeccionar el codigo con firebug, el script no aparece, sin embargo sé que entra al if porque no se muestra el formulario. También intenté escribirlo con el helper javascript_tag() y nada, escribiendolo con echo y nada, usando el helper use_javasript() y el archivo no se agrega. He limpiado la caché, incluso reiniciado el pc y sigue sin redirecccionar.

Bueno de todas formas tengo una idea, la cual sería hacer una funcion javascript que preguntara cada cierto tiempo en el servidor si la sesion sigue activa. Ese tiempo deberia ser el tiempo de inactividad que definimos. Entonces si la sesion caduca, enviar un alert o algo y cuando presione aceptar, se redireccione. Bueno si alguien me ayuda a la parte de consultar al servidor, porque no se como hacer eso con javascript, de hecho sé muy poco. Ojala sirva mi idea

Saludos!
--
Carlos Martínez Sánchez
Ing. Ejec. Informática
(09) - 2657574

Fons81

unread,
Aug 17, 2009, 8:55:41 AM8/17/09
to symfony-es


On 17 ago, 04:50, Carlos Martínez <carlos.f.martine...@gmail.com>
wrote:
> Yo estoy intentando hacer lo mismo, leyendo los links que dejaron hice lo
> siguiente:
>
> # plugins\sfGuardPlugin\modules\sfGuardAuth\templates\signinSuccess.php
>
> <?php use_helper('Javascript');?>
>
> <?php use_helper('Asset');?>
>
> <?php if($sf_request->isXmlHttpRequest()): ?>
>
>    <?php /*use_javascript('redirect') */ ?>
>
>    <script type="text/javascript">
>          function redireccionar(url)
>          {
>                window.location.href=url;
>          }
>
>          setTimeout(redireccionar('http://sgcj/estudio_dev.php/'<http://sgcj/estudio_dev.php/%27>),
¿ Y si se comprueba en la acción ?
El usuario al hacer el siguiente click que requiera autenticación..

function executeFuncionAjax($request)
{
if($this->getUser->isAuthenticated())
{
return $this->renderText(' estás autenticado');
}
else
{
return $this->renderText('<script>window.location.replace("http://
dominio.com/registro")</script>');
}

}




No lo he podido probar aún pero ¿qué opinan?

Carlos Martínez

unread,
Aug 17, 2009, 10:57:31 AM8/17/09
to symfo...@googlegroups.com

Gracias voy a probarlo y te cuento

orochies

unread,
Aug 18, 2009, 12:08:55 PM8/18/09
to symfony-es
Me parece que la opcion que indica Fons81 sería en mi opinion la mas
acertada pero no sera mejor retornar un $this->redirect($url); en la
accion aunque así se perderia el punto de la llamada con ajax y
redireccionaria despues de hacer el login a la paginá de donde se hizo
la llamada ajax sin el contenido solicitado.

On 17 ago, 08:57, Carlos Martínez <carlos.f.martine...@gmail.com>
wrote:
> Gracias voy a probarlo y te cuento
>

Fran

unread,
Aug 29, 2009, 5:24:32 AM8/29/09
to symfony-es
Lo siento, estuve unos días fuera y no tenía internet,

Gracias por las sugerencias, al final hice lo de Fons81, pero
modificándolo un poco, ya que con sfGuardPlugin lo tengo configurado
con secure_on en todas las acciones, por lo que cuando expira la
sesión no se ejecutan. Lo que he hecho es en la accion signin de
sfGuardAuth añadir el siguiente código:

if ($request->isXmlHttpRequest())
{
return $this->renderText('<script>window.location.replace("'.
$this->getController()->genUrl("sfGuardAuth/signin").'")</script>');
}

El resultado es el mismo que tenía, pero me gusta más en la acción.

Saludos,

Fran
Reply all
Reply to author
Forward
0 new messages