Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment stocker les données de session de l'utilisateur

Vous pouvez écrire votre login PHP comme,

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

Ensuite, pour cliquer sur les URL, vous pouvez peut-être utiliser jQuery et AJAX. Vous devez déclarer une classe comme "link-block" dans votre CSS, et écrire les URL comme ceci

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

et ajoutez un gestionnaire de clics à ces DIV dans le Javascript onReady de la page, après avoir inclus les scripts jQuery :

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

Le gestionnaire de points d'augmentation doit ouvrir la session, qui est le même code que celui que vous avez ci-dessus (vous pouvez donc le mettre dans une inclusion externe "session.php"), et ouvrir la connexion à la base de données (une autre inclusion...), puis :

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

ou si vous n'avez qu'un nom d'utilisateur (assurez-vous qu'il est correctement échappé)

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

Au fait, je dois ajouter le standard mysql_* clause de non-responsabilité relative à l'obsolescence .

Après quoi, vous pouvez renvoyer les points actuels à afficher dans un DIV avec l'identifiant "points-block":

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

en le renvoyant dans JSON après les avoir interrogés à partir de la base de données (ou vous pouvez les garder en session et mettre à jour à la fois la base de données et la session ; cela vous évite une requête)

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

Vous pouvez également le faire d'autres manières, mais je n'ai vu aucune ancre dans votre lien div, donc je suppose que vous voulez quelque chose de dynamique, ce qui signifie principalement AJAX.