更新会话变量

时间:2015-02-18 17:44:30

标签: php mysql

因此,在一个单独的php文件中,我将用户拥有的点数和其他信息(如数据库中的电子邮件)写入PHP会话中:

// write user data into PHP SESSION
$_SESSION['user_name']         = $result_row->user_name;
$_SESSION['user_email']        = $result_row->user_email;
$_SESSION['user_login_status'] = 1;
$_SESSION['user_Points']       = $result_row->user_Points;

接下来,当用户登录以显示他拥有的点数时,我有一个单独的php文件:

// The amount of points the user has
Hey, you currently have 
<?php echo $_SESSION['user_Points'];?>        

它工作正常,但当我更新用户拥有的phpmyadmin中的点数时,刷新点数的唯一方法是注销并再次登录。我知道会话只设置变量一次,但是我想问一下是否有更新点的方法,而无需注销并再次登录,如:刷新页面,使用JavaScript或其他方式。提前谢谢你:)

2 个答案:

答案 0 :(得分:0)

每次用户重新加载页面时,最好从DB中检索值,而不是在他/她登录时将其保存在$_SESSION上。

如果要保留$_SESSION['user_Points'],您可以执行一项功能,在显示用户点的文件的开头,更新$_SESSION['user_Points'],使用例如{{1}从DB检索它在WHERE子句中,类似于查询:

$_SESSION['user_email']

之后,如果用户重新加载页面,$your_query = 'SELECT user_points FROM users WHERE user_email = '.$_SESSION['user_email'].''; 将会更新。

答案 1 :(得分:0)

每次处理点而不是在会话中缓存它时,读取db可能会更好。您可以将用户ID保留在会话中,这样您就可以实时对点进行数据库查找。但如果你真的想在一段时间内延迟阅读新值,你就可以这样。

首先在登录时将更新的时间保存到会话中:

$_SESSION['LAST_UPDATED'] = time();

然后在后续请求中,检查自会话中更新时间以来是否已经过了一定时间,如果是,请更新相关会话变量:

if (isset($_SESSION['LAST_UPDATED']) && (time() - $_SESSION['LAST_UPDATED'] > 120))
{
    //its been 2 minutes since last update
    //pull values from db again, and store in session again
    .....
    $_SESSION['user_Points']       = $result_row->user_Points;

    //set the updated time
    $_SESSION['LAST_UPDATED'] = time();
}
相关问题