sql >> Base de Datos >  >> RDS >> Mysql

Cómo almacenar datos de sesión del usuario

Puede escribir su PHP de inicio de sesión como,

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

Luego, para hacer clic en las URL, quizás podría usar jQuery y AJAX. Debe declarar una clase como "bloque de enlace" en su CSS y escribir las URL de esta manera

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

y agregue un controlador de clics a esos DIV en el Javascript onReady de la página, después de incluir los scripts jQuery:

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

El controlador de puntos de aumento necesita abrir la sesión, que es el mismo código que tiene arriba (para que pueda ponerlo en una "sesión.php" de inclusión externa), y abrir la conexión de la base de datos (otra inclusión...), entonces:

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

o si solo tiene un nombre de usuario (asegúrese de que esté correctamente escapado)

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

Por cierto, necesito agregar estándar mysql_* renuncia de responsabilidad .

Después de lo cual, puede devolver los puntos actuales para que se muestren en un DIV con id de "bloque de puntos":

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

devolviéndolo en JSON después de consultarlos desde la base de datos (o puede mantenerlos en sesión y actualizar tanto la base de datos como la sesión; le ahorra una consulta)

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

También puede hacer esto de otras maneras, pero no vi ningún ancla en su div de enlace, así que supongo que quiere algo dinámico, que en su mayoría significa AJAX.