2009-07-31 8 views
8

Je voudrais déterminer si l'utilisateur est connecté ou si elles sont simplement anonymes de javascript ...Comment puis-je vérifier si l'utilisateur est anonyme ou connecté à partir de javascript?

Je trouve this question, mais il est code php et je ne sais pas s'il y a une session variable appelée "log_in" qui est stockée lors de la connexion ou si c'était juste quelque chose que cette personne avait elle-même implémenté.

Quelqu'un sait comment je peux vérifier si l'utilisateur est connecté à partir de javascript, en utilisant éventuellement ajax?

Edit: Je suis en Asp.Net MVC, désolé aurait dû préciser

Il en est ainsi que je peux mettre en œuvre une connexion ajax côté client. Lorsque la page se charge, j'ai besoin de savoir si l'utilisateur est connecté ou non afin que je puisse implémenter quelque chose de similaire à un contrôle <asp:LoggedInView> en utilisant jquery.

Merci,
Matt

+0

Votre page est en asp, php, etc? – VinPepe

+0

J'ai édité ma réponse conformément à vos modifications. – kentaromiura

Répondre

10

Vous ne pouvez pas lire les données enregistrées de session à partir de JavaScript.

Un moyen facile de le faire est de créer un JS var de PHP (plus facile que la solution de cookies), comme ceci:

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>'; 
} 

Ensuite, la JS simplement vérifier la logged_in native var pour voir si l'utilisateur est connecté.

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

Si nous allons parler de mauvais pratiques (voir tous les commentaires sur ma réponse) alors celui-ci subit tout de même les chutes. C'est toujours une variable côté client qui est facilement modifiée. Cependant, en ce qui concerne la réponse à la question du poster original, celle-ci est tout aussi bonne. – idrumgood

+6

absolument dangereux. Meilleure façon: vérifiez le côté serveur avec la requête http ajax lorsque l'action en a besoin (de manière prévisible dans votre fonction javascript) – Julien

+0

une excellente réponse pour les débutants! vraiment –

6

[DISCLAIMER] Depuis que je reçois tant de commentaires des gens au sujet de ce qui est « mauvaise pratique », je vais juste dire ceci: Il est une mauvaise pratique de le faire de cette façon, mais nous ne savons pas ce que l'affiche originale a l'intention de faire. Pour tout ce que nous savons, il a tout fait à 100% correct et sécurisé, et demandait simplement s'il y avait un moyen d'y accéder à partir de javascript. Ce que j'ai fait ci-dessous est ma meilleure idée de la façon d'accomplir ce qu'il a demandé. [/ DISCLAIMER]

Vous pouvez avoir votre php, ou n'importe quelle langue de backend que vous utilisez, définir un cookie que vous pouvez ensuite lire avec javascript.

document.cookie 

simple comme cela. Vous devrez rechercher la chaîne de cookie pour le nom de votre cookie connecté.

Vous pouvez également l'utiliser pour définir un cookie et faire votre Connexion via javascript (mais probablement pas la meilleure idée.)

Voir here pour un aperçu rapide de l'accès aux cookies javascript.

[modifier]

Pour aborder la question d'un script client ayant accès à l'information de session, et l'utilisation possible de ajax suggéré dans la question initiale:

Oui, un appel ajax serait une très moyen facile de vérifier cela. Je suis plus un mec jQuery, donc mon expérience ajax se trouve là, mais fondamentalement, vous feriez un appel ajax à votre fonction backend, et cette fonction backend vérifie simplement la variable de session 'loggedin', renvoyant un vrai ou faux.

De plus, puisque vous avez maintenant mentionné que vous utilisez jQuery, voyez this page pour un accès facile aux cookies jQuery. [/ edit]

+0

Je ne vais pas downvote parce que techniquement correct mais je devrais conseiller, c'est probablement faux! Les scripts client ne doivent rien savoir de la session, ils doivent être manipulés de manière transparente côté serveur. – kentaromiura

+3

Vous avez raison, le script client NE DEVRAIT PAS connaître les trucs de la session, mais la question de l'auteur de l'original demande comment accéder aux informations de javascript, à la réponse fournie prend soin de cela. – idrumgood

+0

Ok, mais il reste faux, si vous utilisez l'authentification cookieless le seul moyen est de voir si l'URL a quelque chose dedans. Et si quelqu'un utilise un mode d'authentification personnalisé (par exemple, en passant un identificateur de session dans un champ caché), aucun de ces moyens ne peut être un bon moyen d'y parvenir. La bonne chose à faire est de charger 2 scripts différents, un pour l'accès anonyme et l'autre pour user.stop authentifié. btw, si le script affiche/cache des choses importantes pour des raisons évidentes de sécurité (et de performance aussi) cette partie doit être générée côté serveur. – kentaromiura

0

Vous pouvez analyser document.cookie.

+1

Ne fonctionnera pas avec les cookies HttpOnly, et même si ceux-ci étaient pas utilisé c'est toujours faux, parce que n'importe qui peut commencer une session mais cela ne veut pas dire qu'ils sont signés dedans ... enfin, JS ne devrait pas lire les cookies destinés au côté serveur –

1

Cela n'a aucun sens. Si un utilisateur est connecté, vous le connaissez côté serveur. Vous n'avez donc pas à vérifier si vous êtes connecté côté client.

--edit:

Après cet éclaircissement, je ne peux que suggérer de vérifier sur le contrôleur si l'utilisateur est connecté, le cas échéant, vous montrer la vue normale, sinon vous montrer une autre vue.

- EDIT ajouté aphorisme:

Certaines personnes, lorsqu'ils sont confrontés à un problème, pense « Je sais, je vais utiliser ajax. » Maintenant, ils ont au moins deux problèmes

2

C'est une solution généralement implémentée avec des langages côté serveur. Avec JS vous, au moins, pourrait définir dans son client un cookie où stocker cette information. Cependant, avec Ajax vous devriez avoir une page (par exemple check_login.jsp/.apsx etc.) où vérifier si l'utilisateur est connecté (accès à un DB, une variable de session, etc.) et si c'est le cas, retournez à JS (via JSON) que l'information et la lumière, par exemple un DIV avec une couleur verte ...

Alors:

check_login.aspx -> retourner l'info via Response.Write("{user_logged:true}");

de login.aspx dans votre code HTML avec JS vous aurez un appel AJAX où votre xmlhttp est déjà une instance de XMLHttpRequest objet ...

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

meilleure façon à mon avis, est de le faire via ajax.

Cela va le faire.

fichier 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

Vous pouvez vérifier avec le code ci-dessous:

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