AngularJS ngRoute e PHP $_SESSION variabili

Ho 3 pagine:

  1. index.php
  2. login.php
  3. display.php

index.php

Imposta AngularJS utilizzando il ngRoute modulo per navigare le mie pagine.

login.php

Caricata e set PHP $_SESSION variabili.

display.php

Echos il contenuto di $_SESSION.

Ho navigare display.php da login.php l’utilizzo di un collegamento di installazione con ngRoute.

Problema

display.php non vedi $_SESSION variabili non importa quante volte io, navigare e da esso. Verrà visualizzata solo se mi cerca manualmente la pagina, ad esempio per aggiornare la pagina o inserire l’indirizzo nel browser.

So che il codice php non viene eseguito perché posso eco le altre cose a schermo semplicemente non ha accesso il $_SESSION variabili.

Perché è questo?

  • Io davvero non capisco nulla 🙁 Perchè ci sono 3 file php?
  • AngularJS di routing è di una sola pagina di collegamento, il che significa che non vi è alcuna interazione con il server oltre le chiamate ajax. Si avrebbe bisogno di fare una chiamata ajax per la richiesta di $_SESSION variabili
  • Vorrei assumere ngRoute fa fare le chiamate ajax perché tutto il resto che ho l’eco in display.php funziona bene. Quindi deve essere una interazione con il server.
  • Non si capisce cosa si sta cercando di fare. non è possibile visualizzare qualsiasi di questi $routeProvider/server di routing/riscrittura in base alla tua descrizione
  • In sostanza, in qualsiasi AngularJS pagina singola applicazione non riesco PHP $_SESSION variabili di lavoro, che sembrano richiedere di caricare la pagina tramite un refresh per ottenere l’aggiornamento valori per le variabili. L’esecuzione di pagine utilizzando $http in AngularJS sembra di fare qualcosa di diverso, allora in esecuzione la pagina nel browser. phpFiddle è giù in questo momento. Io vi aggiunge un phpFiddle quando il sito è tornato up.
  • Il problema potrebbe essere che le chiamate ajax non impostare i cookie e la sessione non è impostato, perché non hai session_id a identificare? Provare a gestione prima volta che. Si potrebbe fare una chiamata ajax che fa il login/auth roba e inizia la sessione e restituisce un id di sessione. poi bisogna aggiungere che l’id di sessione per ogni chiamata (cioè come parametro nell’url) e archivia tutti i tuoi php per aprire la sessione corretta.
  • _If vuoi potrei provare a scrivere una risposta, spiegando che in modo più dettagliato, ma ancora non sono sicuro se è quello che si stanno chiedendo
  • Sto iniziando la sessione con session_start() in index.php e funzionante, che di nuovo in display.php prima di tentare di eco $_SESSION variabile. Effettivamente la variabile di sessione È aggiornato tuttavia sembra che AngularJS (la chiamata ajax) non possono vedere di nuovo valore e visualizza il valore precedente. Tuttavia, se mi aggiorna la pagina (con conseguente caricamento di una pagina e non una chiamata ajax) aggiornato variabile viene visualizzata correttamente. Così sono sicura di usare la sessione corretta mi sembra di essere in grado di impostare il $_SESSION variabili di via AngularJS(ajax), ma non farli. Posso solo ottenere i valori iniziali impostati al caricamento della pagina iniziale.
  • Se sei sicuro che la chiamata ajax è si verifica, quindi mi consigli di aggiungere a questo url nella richiesta: 'path/to/display.php?'+Date.now();. Può essere che non si può vedere la sessione perché la cache del browser.

InformationsquelleAutor Craig | 2014-02-28

 

4 Replies
  1. 7

    Penso che potrei vedere dove il vostro problema. Si tenta di accedere a sessioni in php nella vostra pagina singola angularJS modelli HTML sono di destra? come:

    <div ng-repeat="n in <?php $_SESSION['someSessionArray'] ?>">

    Che non è come funziona. Il $_SESSION non sarà mai disponibile in modelli.
    Che cosa si può fare, è usare una richiesta ajax per il tuo login di autenticazione e di richiesta di dare un id di sessione.
    Quindi di utilizzare l’id di sessione all’avvio della sessione di ulteriori richieste ajax (come già detto).

    Quindi, se si desidera memorizzare qualcosa per la sessione di php, l’accesso ai dati tramite richiesta ajax e php servizio.

    molto, MOLTO, MOLTO, semplice Esempio:
    all’interno getFromSession.php

    session_start($_GET['session_id']);
    $key = $_GET['key']
    echo json_encode($_SESSION[$key]);

    all’interno storeToSession.php

    session_start($_GET['session_id']);
    $key = $_GET['key'];
    $value = $_GET['value'];
    $_SESSION[$key] = $value;

    all’interno del vostro login.php

    $user = yourAuthMechanism($_GET['username'],$_GET['password']);
    if($user) {
      session_start();
      echo json_decode(array('status' => 'success','sid' => session_id()));
    }
    else { ... error handling

    all’interno di qualsiasi parte del vostro angolare in cui è necessario l’accesso di dati di sessione:

    $promise = $http.get('pathtoyourphp/getFromSession.php?key=foo');
    $http.set('pathtoyourphp/getFromSession.php?key=bar&value=4');
    //now use promise to acces the data you got from your service
    • Grazie, Sì sembra che i modelli non possono accedere a sessioni di variabili (eppure ancora eseguire php?). Io ora eseguire $http.ottenere per ottenere e impostare le mie sessioni di variabili e quindi assegnare a $ambito di usare nella mia applicazione. Non ho dovuto preoccuparsi di l’id di sessione roba era sempre utilizzando la stessa sessione. Grazie per indicarmi la giusta direzione. Ancora non è sicuro al 100% perché i modelli di eseguire i file php in modo diverso rispetto a una chiamata ajax.
    • Modelli di eseguire diversi perché sono rendering di prima convocazione. L’utente non è loggato, la sessione è stata appena creata (se a tutti) e quindi non ci sono informazioni. Dopo la chiamata del login.php via ajax, i modelli non ottenere il rendering in php di nuovo perché non ricaricare la pagina. Hai capito ora?
  2. 1

    In generale, senza alcun motivo esiste, perché AngularJS apps, che la richiesta di
    Basato su PHP lato server roba, non sarà in grado di leggere $_SESSION.

    Che ha detto, si prega di fornire almeno i concetti di base di AngularJS codice, in modo che siamo in grado di fornire ulteriori dettagli.

    Inoltre, mettere solo questo in display.php:

    <?
    
    echo __FILE__
       . '<br />' . date( DATE_RFC822 )
       . '<br />' . var_dump( $_SESSION )
       ;
    
    //intentionally skipped dangerous closing PHP-tag

    Ora eseguire il AngularJS applicazione e dire cosa ne viene fuori.

  3. 1

    Assicurarsi che si avvia la sessione prima di leggere le variabili di SESSIONE.

    <?php
        session_start();
        echo $_SESSION["user9"];
    ?>
  4. 0

    Non credo che siete in cerca di angularJS.
    Io penso che tu stia cercando qualcosa di più simile a questo.

    index.php:

    <html>
        <header>
           <title>Login</title>
        </header>
        <body>
           <form method="POST" action="login.php">
               <input type="username" name="username" placeholder="username" />
               <input type="password" name="password" placeholder="password" />
               <input type="submit" value="Login" />
           </form>
        </body>
    </html>

    login.php

    <?php
       session_start();
       if(empty($_POST)) {
          die("You don't have permission to be here.");
       } elseif(empty($_POST['username']) or empty($_POST['password'])) {
          die("All fields are required.");
       }
    
       $username = "admin";
       $password = "password";
    
       if($_POST['password'] == $password && $_POST['username'] == $username) {
           $_SESSION['loggedIn'] == "true";
           header("Location: show.php");
       } else {
           die("Invalid login");
       }
    ?>

    show.php

     <?php
        if($_SESSION['loggedIn'] == "true") {
            echo "You are logged in";
        } else {
            die("You don't have permission to be here.");
        }
     ?>
    • Sì, certo che funziona, sto cercando di ottenere questo lavoro quando si utilizza AngularJS. AngularJS permette di avere una pagina singola applicazione.

Lascia un commento