Conversione di un sistema di gestione utenti per utilizzare ajax

0

Attualmente sto costruendo un sito web, che fino a poco tempo fa era puramente PHP. Tuttavia ora sto cercando di fare in modo che il sito usi più AJAX, per ridurre la ricarica della pagina. In PHP avevo una bella user class orientata agli oggetti con metodi per l'aggiornamento dei dati, la disconnessione e così via. Quando un utente accede a questo, verrebbe memorizzato come variabile di sessione, e quindi qualsiasi pagina che desideri fare qualcosa l'utente potrebbe semplicemente prenderlo dalla sessione e chiamarne i metodi. Chiaramente questo uso di oggetti php e la sessione non funzionano davvero con Ajax. Tuttavia non voglio dover rottamare la memorizzazione dell'utente in un oggetto (che migliora un po 'le cose), quindi non limitarti a seguire la strada per definire una tonnellata di funzioni js che catturano il nome utente corrente, e usa il fare query mysql attraverso ajax. Sono stupido qui, e quale percorso raccomanderebbe la gente che prendo.

    
posta w4etwetewtwet 25.03.2013 - 21:53
fonte

2 risposte

2

Le richieste AJAX inviano il cookie per impostazione predefinita. Supponendo che stai mappando il tuo oggetto utente alla sessione PHP, la richiesta su AJAX dovrebbe avere automaticamente accesso alla sessione e all'oggetto utente.

Se stai utilizzando un altro metodo per gestire le sessioni (ad esempio un ID di sessione aggiunto alla stringa di query) a) diffidare dello spoofing della sessione e b) aggiungerlo manualmente alla richiesta AJAX. E VOILA.

    
risposta data 25.03.2013 - 22:25
fonte
2

Sessioni e oggetti funzionano ancora con Ajax. Le sessioni mantengono le informazioni sul lato server e gli oggetti sono solo strutture organizzative per il codice che viene eseguito lì. Molto di quello che stai chiedendo è roba che raccogli dalla programmazione dell'esperienza in generale. Dovresti fare un po 'di lettura e pianificare di elaborare un piano più solido su come vuoi che l'applicazione funzioni.

Innanzitutto, controlla le risorse come le seguenti:

www [punto] phptherightway [punto] com

www [punto] codecademy [punto] com / track / javascript-combined

Più in particolare:

link link

Questi sono i fondamenti dell'organizzazione del codice. Impara presto e la vita sarà più facile lungo la strada. Una volta che hai perso quelle parole, probabilmente saprai dove andare per trovare soluzioni più avanzate. Naturalmente, StackOverflow è una grande risorsa per trovare tutti i tipi di soluzioni.

Ricorda sempre che con AJAX stai facendo lo stesso ciclo di richiesta / risposta che fai sempre dal punto di vista lato server. Dal punto di vista del cliente, tratti sezioni della pagina come piccoli browser indipendenti che sono in grado di fare nuove richieste mentre stai guardando la pagina. Quindi, tenendo presente questo, il seguente esempio potrebbe essere un metodo per ottenere ciò che stai cercando di fare.

segmento del file di intestazione

<script>
    jQuery(function(){
        jQuery('#login').click(function(e){
            //stops form from submitting via normal behavior
            e.preventDefault();
            //cache the form element because each time
            //you do a jQuery() search, a puppy dies
            var form = jQuery(this).parents('form');
            jQuery.post(
                form.attr('action'),
                form.serialize(),
                function(data) {
                   var responseString = 'Logged in as ' + data.firstName + ' ' + data.lastName;
                   form.html(responseString);
                }
            );
        });
    });
</script>
<form action="ajax_controller.php">
    <input type="hidden" name="action" value="authenticate" />
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" />
</form>

controller ajax

<?php
    if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
        /* Safety first, but use the mysqli version of 
         * this if you are using a mysql db
         */
        foreach ($_POST as $post)
            $_POST = mysql_real_escape_string($post);

        if ($_POST['action'] === 'authenticate') {
            $user = new User($_POST['username']);
            $success = $user->authenticate($_POST['password']);

            //let's pretend authenticate() returns true or error message
            if ($success === true) {
                $response = array(
                    'firstName' => $user->get_firstName(), 
                    'lastname' => $user->get_lastName()
                );
                return json_encode($reponse);
            } else {
                return $success;
            }
        }
    } else {
        //bark and throw exception, or return html, or whatever
    }
    
risposta data 01.06.2013 - 07:36
fonte

Leggi altre domande sui tag