因此,在一个单独的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或其他方式。提前谢谢你:)
答案 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();
}