Mysql
 sql >> Database >  >> RDS >> Mysql

Come memorizzare i dati della sessione dell'utente

Puoi scrivere il tuo login PHP come,

<?php
    // if PHP > 5.4: if (PHP_SESSION_NONE == session_status()) {
    if ('' == session_id()) {
        session_start();
    }
    if (isset($_SESSION['expires_by'])) {
        $expires_by = intval($_SESSION['expires_by']);
        if (time() < $expires_by) {
            $_SESSION['expires_by'] = time() + intval($_SESSION['expires_timeout']);
        } else {
            session_destroy();
        }
    }
    if (!isset($_SESSION['username'])) {
        Header('Location: ' . $_SERVER['REQUEST_URI']);
        exit();
    }
?>

Quindi per fare clic sugli URL potresti forse usare jQuery e AJAX. Dovresti dichiarare una classe come "link-block" nel tuo CSS e scrivere gli URL in questo modo

echo '<div class="link-block">'.$row['url'].'</div>';

e aggiungi un gestore di clic a quei DIV nel Javascript onReady della pagina, dopo aver incluso gli script jQuery:

$('.link-block').on('click', function(e) {
    $.post('/increase-points.php', { }, function(retval){
        if (retval.newpoints) {
            $('#point-block').html(retval.newpoints);
        }
    });
});

Il gestore del punto di aumento deve aprire la sessione, che è lo stesso codice di cui sopra (quindi puoi inserirlo in un include esterno "session.php") e aprire la connessione al database (un altro include...), quindi:

UPDATE usertable SET points = points + 1 WHERE user_id = {$_SESSION['user_id']};

o se hai solo un nome utente (assicurati che sia correttamente sottoposto a escape)

...WHERE username = '{$escapedSessionUsername}';

A proposito, devo aggiungere il standard mysql_* dichiarazione di non responsabilità .

Dopodiché, potresti restituire i punti correnti da visualizzare in un DIV con id "punti-blocco":

    You have <span id="points-block"></span> points.

restituendolo in JSON dopo averli interrogati dal database (oppure puoi tenerli in sessione e aggiornare sia il DB che la sessione; ti salva una query)

    // This in /update-points.php
    $retval = array('newpoints' => $updated_points);
    Header('Content-Type: application/json;charset=utf8');
    die(json_encode($retval));

Puoi farlo anche in altri modi, ma non ho visto alcun anchor nel tuo link div, quindi immagino che tu voglia qualcosa di dinamico, il che significa principalmente AJAX.