2009-07-31 10 views
8

Vorrei determinare se l'utente è connesso o se sono solo anonimo da javascript ...Come posso verificare se l'utente è anonimo o ha effettuato l'accesso da javascript?

ho trovato this question, ma è il codice php e non ero sicuro se c'è una sessione variabile chiamata logged_in che viene memorizzata al login o se era solo qualcosa che quella persona aveva implementato da sé.

Qualcuno sa come posso verificare se l'utente è connesso da javascript, possibilmente utilizzando ajax?

Edit: Io corro Asp.Net MVC, mi dispiace avrebbe dovuto precisare

Questo è così che io possa implementare un ajax login sul lato client. Quando viene caricata la pagina, devo sapere se l'utente ha effettuato l'accesso o meno, quindi posso implementare qualcosa di simile a un controllo <asp:LoggedInView> utilizzando jquery.

Grazie,
Matt

+0

è la tua pagina in asp, php, ecc? – VinPepe

+0

Ho modificato la mia risposta in modo conforme alle vostre modifiche. – kentaromiura

risposta

10

Non è possibile leggere i dati salvati di sessione da JavaScript.

Un modo semplice per farlo è quello di creare un JS var da PHP (più facile di soluzione biscotti), in questo modo:

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

Poi il JS semplicemente controllare il nativo logged_in var per vedere se l'utente è loggato.

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

Se parliamo di male pratiche (vedi tutti i commenti sulla mia risposta) quindi questo subisce tutti gli stessi cedimenti. È ancora una variabile lato client che può essere facilmente modificata. Tuttavia, per quanto riguarda la risposta alla domanda del poster originale, questo è altrettanto valido. – idrumgood

+6

assolutamente pericoloso. Il modo migliore: controlla il lato server con la richiesta http ajax quando l'azione ne ha bisogno (proababilmente nella tua funzione javascript) – Julien

+0

un'ottima risposta per i principianti! veramente –

6

[Disclaimer] Dal momento che sto ottenendo così tanti commenti da parte di persone su questo essere 'cattiva pratica', sto solo andando a dire questo: è cattiva pratica di fare in questo modo, ma non sappiamo cosa intenda fare il poster originale. Per quanto ne sappiamo, ha fatto tutto il resto al 100%, corretto e sicuro, e stava solo chiedendo se c'era un modo per ottenere da javascript. Quello che ho fatto sotto è la mia migliore idea su come realizzare ciò che ha chiesto. [/ DISCLAIMER]

Puoi avere il php, o qualsiasi altra lingua di backend che stai utilizzando, impostare un cookie che puoi quindi leggere con javascript.

document.cookie 

semplice. Dovrai cercare nella stringa del cookie il nome del tuo cookie registrato.

È inoltre possibile utilizzare che per impostare un cookie e fare la tua registrazione attraverso javascript (anche se probabilmente non l'idea migliore.)

Vedi here per una rapida panoramica di JavaScript accesso dei cookie.

[modifica]

per affrontare la questione di uno script client di avere accesso a informazioni di sessione, e il possibile utilizzo di ajax suggerito nella domanda iniziale:

Sì, una chiamata AJAX sarebbe molto modo semplice per controllare questo. Sono più di un ragazzo jQuery, quindi la mia esperienza ajax si trova lì, ma fondamentalmente, si farebbe una chiamata ajax alla propria funzione di back-end, e quella funzione di back-end controlla semplicemente la variabile di sessione 'loggata', restituendo un vero o falso.

Inoltre, poiché ora hai menzionato che stai usando jQuery, vedi this page per un facile accesso ai cookie jQuery. [/ edit]

+0

Non avrò downvote perché è tecnicamente corretto ma dovrei consiglio, probabilmente è SBAGLIATO! Gli script client non devono sapere nulla sulla sessione, devono essere gestiti in modo trasparente sul lato server. – kentaromiura

+3

Hai ragione, lo script del client NON DEVE sapere nulla sulla sessione, ma la domanda del poster originale chiede come accedere alle informazioni da javascript, alla risposta fornita si prende cura di ciò. – idrumgood

+0

Ok, ma è sbagliato, se stai usando l'autenticazione senza cooky l'unico modo è vedere se l'url ha qualcosa in esso. E se qualcuno usa una modalità di autenticazione personalizzata (ad esempio, passando sessionID in un campo nascosto), in questo modo non può essere un buon modo per gestirlo. La cosa corretta da fare è caricare 2 script diversi, uno per l'accesso anonimo e uno per user.stop autenticato. btw, se lo script mostra/nasconde cose importanti per ovvi motivi di sicurezza (e anche prestazioni) quella parte dovrebbe essere generata lato server. – kentaromiura

0

È possibile analizzare document.cookie.

+1

Non funzionerà con i cookie HttpOnly, e anche se questi fossero non usato è ancora sbagliato, perché chiunque può avviare una sessione, ma questo non significa che sono stati registrati ... per finire, JS non dovrebbe leggere i cookie destinati al lato server –

1

Non ha alcun senso. Se un utente ha effettuato il login, lo sai dal lato server. Quindi non devi controllare se hai effettuato l'accesso sul lato client.

--edit:

Dopo la precisazione, posso solo suggerire di verificare sul controller, se viene registrato l'utente, in caso affermativo si mostrare la vista normale, altrimenti vi mostrerò una diversa visualizzazione.

- EDIT Aforisma ha aggiunto:

Alcune persone, quando di fronte a un problema, credo “Lo so, io uso l'Ajax.” Ora hanno almeno due problemi

2

Questo è una soluzione solitamente implementata con linguaggi lato server. Con JS tu, almeno, potresti impostare nel suo client un cookie in cui memorizzare tali informazioni.

Tuttavia con Ajax si dovrebbe avere una pagina (ad esempio check_login.jsp/.apsx ecc.) Dove controllare se l'utente è loggato (accesso a un DB, una variabile di sessione ecc.) E se così ritorna a JS (via JSON) che le informazioni e, per esempio accendere un DIV con un colore verde ...

Quindi:

check_login.aspx -> tornare informazioni tramite Response.Write("{user_logged:true}");

dal login.aspx nel codice HTML con JS avrai una chiamata AJAX dove il tuo xmlhttp è già un esempio di XMLHttpRequest oggetto ...

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

modo migliore a mio parere è di farlo tramite la tecnologia AJAX.

Questo lo farà.

file di 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

È possibile controllare con il codice qui sotto:

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