sql >> Databasteknik >  >> RDS >> Mysql

Hur man lagrar sessionsdata för användare

Du kan skriva din PHP-inloggning som,

<?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();
    }
?>

För att sedan klicka på webbadresserna kan du kanske använda jQuery och AJAX. Du bör deklarera en klass som "link-block" i din CSS och skriva webbadresserna så här

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

och lägg till en klickhanterare till dessa DIV i sidans onReady Javascript, efter att ha inkluderat jQuery-skript:

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

Ökningspunktshanteraren måste öppna sessionen, vilket är samma kod som du har ovan (så att du kan lägga in den i en extern include "session.php"), och öppna databasanslutningen (en annan inkluderar...), sedan:

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

eller om du bara har ett användarnamn (se till att det är korrekt escaped)

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

Förresten, jag måste lägga till standard mysql_* avskrivningsfriskrivning .

Därefter kan du returnera de aktuella punkterna som ska visas i en DIV med id för "points-block":

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

genom att returnera den i JSON efter att ha frågat dem från databasen (eller så kan du behålla dem i session och uppdatera både DB och session; det sparar en fråga)

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

Du kan göra detta på andra sätt också, men jag såg inget ankare i din länk-div, så jag antar att du vill ha något dynamiskt, vilket mest betyder AJAX.




  1. Synkronisera elasticsearch vid anslutning till databas - nodeJS

  2. Hur man hittar dubbletter i MySQL

  3. mysql anpassad sortering

  4. Hur visar man hierarkiska NESTED SET-data med PHP?