如何存储用户的会话数据

Posted

技术标签:

【中文标题】如何存储用户的会话数据【英文标题】:How to Store session data of user 【发布时间】:2015-04-03 14:58:31 【问题描述】:

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

成功登录后我的站点中有登录系统我的受保护页面仅在登录后显示我想添加 $_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>';


?>

【问题讨论】:

为什么你有这么多if (session_id() == "") session_start(); 电话? 误重复 你只需要 1.... 但是,我的查询解决方案 【参考方案1】:

您可以编写您的登录 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();
    
?>

然后单击 URL,您也许可以使用 jQuery 和 AJAX。你应该在你的 CSS 中声明一个类似“link-block”的类,并像这样编写 URL

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

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

$('.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 为“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。

【讨论】:

以上是关于如何存储用户的会话数据的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何在会话中存储数据?

通过将数据存储在会话存储中进行会话管理

Laravel 4.2 将用户 ID 存储在会话数据中的啥位置?

PHP存储会话数据,在会话中存储用户ID

如何在 Spring MVC 中存储会话

Laravel 如何在会话 Laravel 中存储额外的数据/值