2009-07-31 36 views
8

me gustaría para determinar si el usuario está conectado o si son simplemente anónima de javascript ...¿Cómo puedo verificar si el usuario es anónimo o ha iniciado sesión desde javascript?

He encontrado this question, pero es el código php y yo no estaba seguro de si hay una sesión variable llamada logged_in que se almacena en el inicio de sesión o si era algo que la persona había implementado.

¿Alguien sabe cómo puedo verificar para ver si el usuario ha iniciado sesión desde javascript, posiblemente usando ajax?

Editar: estoy corriendo Asp.Net MVC, lo siento debería haber especificado

Esto es para que pueda implementar una ajax entrada del lado del cliente. Cuando se carga la página, necesito saber si el usuario está conectado o no, así que puedo implementar algo similar a un control <asp:LoggedInView> usando jquery.

Gracias,
Matt

+0

Está su página en asp, php, etc? – VinPepe

+0

Edité mi respuesta de acuerdo a sus modificaciones. – kentaromiura

Respuesta

10

No puede leer datos de la sesión guardados de JavaScript.

Una forma sencilla de hacerlo es crear un JS var desde PHP (más fácil que la solución de las cookies), así:

if ($_SESSION['logged_in'] == 1) { 
    echo '<script type="text/javascript">var logged_in=true;</script>'; 
} else { 
    echo '<script type="text/javascript">var logged_in=false;</script>'; 
} 

A continuación, el JS simplemente comprobar el nativo logged_in var para ver si el usuario está conectado.

<script type="text/javascript"> 
    if (logged_in) { 
     alert("My user is logged in!"); 
    } 
</script> 
+1

Si vamos a hablar de malas prácticas (ver todos los comentarios en mi respuesta) entonces esta sufre las mismas caídas. Sigue siendo una variable del lado del cliente que se modifica fácilmente. Sin embargo, en lo que respecta a responder la pregunta del cartel original, esta es igual de buena. – idrumgood

+6

absolutamente inseguro. La mejor manera: revisa el lado del servidor con la solicitud http ajax cuando lo necesites (probablemente en tu función javascript) – Julien

+0

¡una gran respuesta para principiantes! De Verdad –

6

[Aviso Legal] Desde que he estado recibiendo muchos comentarios de la gente acerca de este ser 'mala práctica', sólo voy a decir esto: es una mala práctica de hacer de esta manera, pero no sabemos lo que el póster original tiene la intención de hacer. Por lo que sabemos, ha hecho todo lo demás al 100% correcto y seguro, y solo estaba preguntando si había alguna forma de obtenerlo desde javascript. Lo que he hecho a continuación es mi mejor idea de cómo lograr lo que ha pedido. [/ EXENCIÓN DE RESPONSABILIDAD]

Puede hacer que su php, o el lenguaje de back-end que esté utilizando, configure una cookie que luego podrá leer con javascript.

document.cookie 

simple como eso. Tendrá que buscar en la cadena de cookies el nombre de su cookie registrada.

También puede utilizar eso para establecer una cookie y hacer su registro a través de Javascript (aunque probablemente no sea la mejor idea.)

Ver here para una visión rápida de JavaScript acceso de cookies.

[editar]

Para abordar la cuestión de un script de cliente tener acceso a la información de la sesión, y el posible uso de ajax sugiere en la pregunta original:

Sí, una llamada ajax habría una muy Manera fácil de verificar esto. Soy más un jQuery, así que mi experiencia en Ajax está ahí, pero básicamente harías una llamada ajax a tu función de backend, y esa función backend solo verifica la variable de sesión 'registrada', devolviendo un verdadero o falso.

Además, como ahora ha mencionado que está utilizando jQuery, consulte this page para obtener acceso fácil a las cookies de jQuery. [/ edit]

+0

No declinaré porque es técnicamente correcto, pero debería avisar, ¡esto probablemente sea INCORRECTO! Las secuencias de comandos del cliente no deberían saber nada acerca de la sesión, debe ser manejada aparentemente en el servidor. – kentaromiura

+3

Está en lo correcto, la secuencia de comandos del cliente NO DEBE saber nada acerca de la sesión, pero la pregunta del cartel original pregunta cómo acceder a la información de javascript, a la respuesta provista se encarga de eso. – idrumgood

+0

Bien, pero sigue siendo incorrecto, si está utilizando autenticación sin cookies la única forma es ver si la url tiene algo en ella. Y si alguien usa un modo de autenticación personalizado (por ejemplo, pasar el ID de sesión en un campo oculto) tampoco de esta manera puede ser una buena forma de tratar. Lo que se debe hacer es cargar 2 guión diferente, una para el acceso anónimo y otro para user.stop autenticado. Por cierto, si la secuencia de comandos muestra/oculta cosas importantes por razones de seguridad obvias (y el rendimiento también) esa parte se debe generar en el lado del servidor. – kentaromiura

0

Puede analizar document.cookie.

+1

No funcionará con las cookies HttpOnly, y aunque fueran no utilizado, sigue siendo incorrecto, porque cualquiera puede iniciar una sesión, pero eso no significa que haya iniciado sesión ... por último, JS no debería leer las cookies destinadas al lado del servidor –

1

No tiene ningún sentido. Si un usuario está conectado, lo conoce desde el servidor. Para que no tenga que verificar si ha iniciado sesión en el lado del cliente.

--edit:

Después de su aclaración, sólo puedo sugerir para verificar en el controlador si se registra el usuario, si lo que se mostrará la vista normal, de lo contrario se mostrará un punto de vista diferente.

- EDITAR Aforismo añadido:

Algunas personas, cuando se enfrenta a un problema, que “sé, voy a utilizar Ajax.” Ahora tienen al menos dos problemas

2

Esto es una solución generalmente implementada con lenguajes del lado del servidor. Con JS, al menos, podría establecer en su cliente una cookie donde almacenar esa información.

Sin embargo, con Ajax debe tener una página (por ejemplo, check_login.jsp/.apsx etc.) dónde marcar si el usuario está conectado (accediendo a una base de datos, una variable de sesión, etc.) y si es así regrese a JS (a través de JSON) que la información y, por ejemplo, encender un DIV con un color verde ...

Así:

check_login.aspx -> volver la información a través de Response.Write("{user_logged:true}");

de login.aspx en el código HTML con JS tendrá una llamada AJAX donde su xmlhttp Ya es una instancia de objeto XMLHttpRequest ...

var logged = JSON.parse(xmlhttp.responseText); // don't use eval 
if(logged.user_logged) 
document.getElementById("u_l").style.backgroundColor = "#00FF00"; 
1

mejor manera en mi opinión es hacerlo a través de AJAX.

Esto lo hará.

archivo JS ...

 $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: 'check.php', 
      success: function(d) { 
       if(d.r == "fail") { 
        window.location.href = d.url; 
       } else { 
        console.log(d.msg); 
       } 
      } 
     }); 

check.php

if(!isset($_SESSION['loggedin'])){ 

     $response = array(
      'r' => 'fail', 
      'url' => '/home.php' 
     ); 
    } else { 

     $response = array(
      'r' => 'success', 
      'msg' => 'Logged in' 
     ); 
    } 

    echo json_encode($response); 
    exit; 
0

se puede comprobar con más adelante código:

if(jQuery('body').hasClass('logged-in')) { 
// add your jquery code 
} 
Cuestiones relacionadas