2009-07-31 8 views
8

Ich mag würde, um zu bestimmen, ob der Benutzer in oder wenn sie von Javascript nur anonym sind angemeldet ist ...Wie kann ich überprüfen, ob der Benutzer anonym oder von JavaScript eingeloggt ist?

fand ich this question, aber es ist PHP-Code und ich war nicht sicher, ob es eine Sitzung Variable namens logged_in, die bei der Anmeldung gespeichert wird oder wenn dies nur etwas war, das diese Person selbst implementiert hat.

Wer weiß, wie ich überprüfen kann, ob der Benutzer von Javascript eingeloggt ist, möglicherweise mit Ajax?

Edit: Ich bin mit Asp.Net MVC, sorry angegeben

haben sollte Dies ist so, dass ich eine clientseitige Ajax-Login implementieren kann. Wenn die Seite geladen wird, muss ich wissen, ob der Benutzer angemeldet ist oder nicht, also kann ich etwas Ähnliches wie ein <asp:LoggedInView> Steuerelement mit jquery implementieren.

Danke,
Matt

+0

Ist Ihre Seite in ASP, PHP, etc? – VinPepe

+0

Ich habe meine Antwort entsprechend Ihren Änderungen bearbeitet. – kentaromiura

Antwort

10

Sie können sitzungsgespeicherte Daten nicht aus JavaScript lesen.

Eine einfache Möglichkeit, es zu tun ist, eine JS var von PHP (einfacher als Cookies Lösung), wie diese zu erstellen:

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

Dann wird die JS die native logged_in var, wenn der Benutzer überprüfen, einfach angemeldet ist.

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

Wenn wir über schlecht reden Praktiken (siehe alle Kommentare zu meiner Antwort), dann leidet dieser alle die gleichen Stürze. Es ist immer noch eine clientseitige Variable, die leicht geändert werden kann. Was jedoch die Frage des ursprünglichen Posters angeht, ist diese genauso gut. – idrumgood

+6

absolut unsicher. Der beste Weg: Überprüfen Sie die Server-Seite mit http Ajax Anfrage, wenn die Aktion es braucht (wahrscheinlich in Ihrem Javascript-Funktion) – Julien

+0

eine gute Antwort für Anfänger! Ja wirklich –

6

[HAFTUNGSAUSSCHLUSS] Seit ich diesen ist ‚schlechte Praxis‘ so viele Kommentare von Leuten bekommen, ich werde einfach sagen: Es ist eine schlechte Praxis zu tun es auf diese Weise, aber wir wissen nicht, was das ursprüngliche Plakat vorhat. Nach allem, was wir wissen, hat er alles andere 100% richtig und sicher gemacht und fragte nur, ob es einen Weg gab, um von Javascript zu lernen. Was ich unten getan habe, ist meine beste Idee, um zu erreichen, was er verlangt hat. [/ DISCLAIMER]

Sie können Ihren PHP, oder welche Backend-Sprache Sie verwenden, einen Cookie setzen, den Sie dann mit Javascript lesen können.

document.cookie 

einfach so. Sie müssen die Cookie-Zeichenfolge nach dem Namen Ihres angemeldeten Cookies durchsuchen.

können Sie auch, dass ein Cookie zu setzen und Ihre Protokollierung in durch Javascript tun (wenn auch wahrscheinlich nicht die beste Idee.)

here Siehe für einen schnellen Überblick über Javascript-Cookie-Zugang.

[Bearbeiten]

die Ausgabe eines Client-Skript-Adresse Zugriff auf Sitzungsinformationen aufweisen und die mögliche Verwendung von Ajax in der ursprünglichen Frage vorgeschlagen:

Ja, das wäre ein Ajax-Aufruf eine sehr sein einfache Möglichkeit, dies zu überprüfen. Ich bin eher ein jQuery-Typ, also liegt meine Ajax-Erfahrung dort, aber im Grunde würden Sie einen Ajax-Aufruf an Ihre Backend-Funktion ausführen, und diese Backend-Funktion prüft nur die 'eingeloggte' Session-Variable und gibt eine wahr oder falsch zurück.

Da Sie jetzt erwähnt haben, dass Sie jQuery verwenden, finden Sie unter this page für einfache jQuery Cookie-Zugriff. [/ edit]

+0

Ich werde nicht downvote weil technisch korrekt ist aber ich sollte raten, das ist wahrscheinlich FALSCH! Client-Skripts sollten nichts über die Sitzung wissen, sie muss serverseitig serverseitig behandelt werden. – kentaromiura

+3

Sie sind korrekt, Client-Skript sollte nicht über Session-Sachen wissen, aber die ursprüngliche Frage des Posters fragt, wie man auf die Informationen von Javascript zugreifen, um die bereitgestellte Antwort kümmert sich darum. – idrumgood

+0

Ok, aber es bleibt falsch, wenn Sie cookieless Authentifizierung verwenden der einzige Weg ist zu sehen, ob die URL etwas darin hat. Und wenn jemand einen benutzerdefinierten Authentifizierungsmodus verwendet (z. B. Sitzungs-ID in einem versteckten Feld übergeben), kann keine dieser beiden Methoden eine gute Möglichkeit bieten. Die richtige Sache zu tun ist, laden Sie zwei verschiedene Skript, eines für anonymen Zugriff und eines für authentifizierte user.stop. BTW, wenn das Skript wichtige Dinge aus offensichtlichen Sicherheitsgründen (und auch der Performance) anzeigt/versteckt, sollte dieser Teil serverseitig erzeugt werden. – kentaromiura

0

Sie können document.cookie parsen.

+1

Funktioniert nicht mit HttpOnly Cookies, und selbst wenn diese waren nicht benutzt, es ist immer noch falsch, weil jeder eine Sitzung starten kann, aber das bedeutet nicht, dass sie angemeldet sind ... schließlich sollte JS keine Cookies lesen, die für Server-Seite gedacht sind –

1

Es hat keinen Sinn. Wenn ein Benutzer angemeldet ist, kennen Sie ihn serverseitig. Sie müssen also nicht überprüfen, ob Sie auf der Client-Seite angemeldet sind.

--edit:

Nach der Klärung, kann ich nur vorschlagen, auf dem Controller, um zu überprüfen, ob der Benutzer angemeldet ist, wenn so zeigen Sie die normale Ansicht, sonst werden Sie eine andere Ansicht zeigen.

- EDIT hinzugefügt Aphorismus:

Einige Leute, wenn sie mit einem Problem konfrontiert, denken: „Ich weiß, ich werde Ajax nutzen.“ Jetzt haben sie mindestens zwei Probleme

2

Dies ist eine Lösung, die normalerweise mit serverseitigen Sprachen implementiert wird. Mit JS könnten Sie mindestens in seinem Client einen Cookie setzen, wo diese Informationen speichern.

Aber mit Ajax sollten Sie eine Seite haben (zB check_login.jsp/.apsx usw.) wo zu überprüfen , wenn der Benutzer angemeldet ist (Zugriff auf eine DB, eine Session-Variable usw.) und wenn ja, zurück zu JS (via JSON), dass Informationen und zum Beispiel Licht einen DIV mit einer grünen Farbe ...

Also:

check_login.aspx -> Rückkehr die Info über Response.Write("{user_logged:true}");

von login.aspx in Ihrem HTML-Code zurück Mit JS haben Sie einen AJAX-Anruf, wo Ihre xmlhttp Objekt ist bereits eine Instanz von XMLHttpRequest ...

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

beste Weg, meiner Meinung nach ist es über Ajax zu tun.

Dies wird es tun.

JS-Datei ...

 $.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

Sie können mit folgenden Code überprüfen:

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