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

Sådan gemmes sessionsdata for brugeren

Du kan skrive dit login PHP 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();
    }
?>

For derefter at klikke på URL'erne kan du måske bruge jQuery og AJAX. Du bør erklære en klasse som "link-block" i din CSS og skrive URL'erne sådan her

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

og tilføje en klikhåndtering til disse DIV'er i sidens onReady Javascript, efter at have inkluderet jQuery-scripts:

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

Forøgelsespunktshandleren skal åbne sessionen, som er den samme kode som du har ovenfor (så du kan sætte den ind i en ekstern include "session.php"), og åbne databaseforbindelsen (en anden inkluderer...), derefter:

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

eller hvis du kun har et brugernavn (sørg for, at det er korrekt escaped)

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

Forresten skal jeg tilføje standard mysql_* ansvarsfraskrivelse for afskrivning .

Herefter kan du returnere de aktuelle punkter, der skal vises i en DIV med id'et "points-block":

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

ved at returnere det i JSON efter at have forespurgt dem fra databasen (eller du kan holde dem i session og opdatere både DB og session; det sparer dig for én forespørgsel)

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

Du kan også gøre dette på andre måder, men jeg så intet anker i din link div, så jeg gætter på, at du vil have noget dynamisk, hvilket for det meste betyder AJAX.




  1. Indsættelse af tilfældige tal i en tabel i MYSQL

  2. Oracle - Bedste SELECT-sætning til at få forskellen i minutter mellem to DateTime-kolonner?

  3. Parsing af ekstremt store XML-filer i php

  4. Vent Statistics and Query Store