Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como armazenar dados de sessão do usuário


Você pode escrever seu login PHP 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();
    }
?>

Então, para clicar nas URLs, talvez você possa usar jQuery e AJAX. Você deve declarar uma classe como "link-block" em seu CSS e escrever as URLs assim
echo '<div class="link-block">'.$row['url'].'</div>';

e adicione um manipulador de cliques a esses DIVs no onReady Javascript da página, depois de incluir os scripts jQuery:
$('.link-block').on('click', function(e) {
    $.post('/increase-points.php', { }, function(retval){
        if (retval.newpoints) {
            $('#point-block').html(retval.newpoints);
        }
    });
});

O manipulador de ponto de aumento precisa abrir a sessão, que é o mesmo código que você tem acima (para que você possa colocá-lo em um include externo "session.php") e abrir a conexão do banco de dados (outro include ...), então:
UPDATE usertable SET points = points + 1 WHERE user_id = {$_SESSION['user_id']};

ou se você tiver apenas um nome de usuário (certifique-se de que ele tenha escapado corretamente)
...WHERE username = '{$escapedSessionUsername}';

A propósito, preciso adicionar o padrão mysql_* isenção de responsabilidade de uso .

Depois disso, você pode retornar os pontos atuais a serem exibidos em um DIV com id de "points-block":
    You have <span id="points-block"></span> points.

retornando-o em JSON após consultá-los no banco de dados (ou você pode mantê-los em sessão e atualizar o banco de dados e a sessão; isso economiza uma consulta)
    // This in /update-points.php
    $retval = array('newpoints' => $updated_points);
    Header('Content-Type: application/json;charset=utf8');
    die(json_encode($retval));

Você pode fazer isso de outras maneiras também, mas não vi nenhuma âncora em seu link div, então acho que você quer algo dinâmico, o que significa principalmente AJAX.