如何存储用户的会话数据

时间:2015-02-04 07:07:23

标签: php html mysql session

该网站的第一个问题(我是这个网站的新手) 想发布我最难的问题......

我成功登录后在我的网站上有登录系统我的受保护页面仅在登录后显示我想添加 $ _SESSION ['point'] 来存储用户点。并将其保存到如果用户点击链接,数据库和点将增加。我想将这个增加的点存储到我的userdb.php中。我保留所有注册信息的地方。(我没有使用MySql进行注册表单我使用过userdb.php文件)我的受保护页面php代码是

<?php
if (session_id() == "")
{
   session_start();
}
if (!isset($_SESSION['username']))
{
   header('Location: #');
   exit;
}
if (isset($_SESSION['expires_by']))
{
   $expires_by = intval($_SESSION['expires_by']);
   if (time() < $expires_by)
   {
      $_SESSION['expires_by'] = time() + intval($_SESSION['expires_timeout']);
   }
   else
   {
      unset($_SESSION['username']);
      unset($_SESSION['expires_by']);
      unset($_SESSION['expires_timeout']);
      header('Location: #');
      exit;
   }
}
if (session_id() == "")
{
   session_start();
}
if (session_id() == "")
{
   session_start();
}
?>

我的display.php显示网址

<?php

mysql_connect('Server', 'user', 'passs');
mysql_select_db('add');
$query =mysql_query('select * from addimage');

while( $row = mysql_fetch_assoc($query) )
{

echo ' 
<div style="min-width:300px;height:100px;border:red 5px;float:left;">'.$row['url']. '</div>';
}

?>

1 个答案:

答案 0 :(得分:0)

您可以将您的登录信息写为PHP,

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

然后点击你可能使用jQuery和AJAX的URL。您应该在CSS中声明类似“link-block”的类,并编写类似这样的URL

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

在包含jQuery脚本后,在页面的onReady Javascript中为这些DIV添加一个点击处理程序:

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

增加点处理程序需要打开会话,这与上面的代码相同(因此您可以将其放入外部包含“session.php”),并打开数据库连接(另一个包括.. 。),然后:

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

或者如果您只有一个用户名(确保它已被正确转义)

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

顺便说一句,我需要添加standard mysql_* deprecation disclaimer

之后,您可能会返回当前要显示的ID为ID为“points-block”的DIV:

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

在从数据库中查询它们之后通过JSON返回它(或者你可以将它们保存在会话中并更新数据库和会话;它会为你节省一个查询)

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

您也可以通过其他方式执行此操作,但我在链接div中看不到任何锚点,所以我想您想要一些动态的东西,这主要意味着AJAX。