我创建了一个facebook应用程序,这是一个基于PHP和一些mySQL函数的网站。
有一个mysql函数消耗大量的时间,我希望这个函数只在用户登录后的会话开始时执行。
我目前的次优解决方案是,在用户启动我的应用程序后,我检查sql数据库,如果他今天已经启动了应用程序,如果是这样,那么我跳过耗时的函数(如果我每次在用户启动应用程序时检查它会更好)
(if date()>datelastlogin then do something…)
你还有其他优雅的想法吗?
编辑:if ($_SESSION['firstLogon'] = true)的解决方案也不起作用:
下面是我的代码: <?php
include_once($_SERVER['DOCUMENT_ROOT']."/config/config.php");
include_once($_SERVER['DOCUMENT_ROOT']."/config/facebook_config.php");
require_once($_SERVER['DOCUMENT_ROOT']."/script/facebook.php");
include($_SERVER['DOCUMENT_ROOT']."/config/connection.php");
function friends($userid){
global $dbcon;
//that is the time consuming function
$query=.....
}
$facebook = new Facebook($config);
$user_id = $facebook->getUser();
if($user_id) {
try {
$user_profile = $facebook->api('/me','GET');
if (!isset($_SESSION['firstLogon']))
{
echo "firstlogon";
friends($user_id);
}
}
catch(FacebookApiException $e) {
$login_url = $facebook->getLoginUrl( array(
'scope' => 'publish_stream'
));
echo 'Please <a href="' . $login_url . '">login.</a>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
$login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
echo 'Please <a href="' . $login_url . '">login.</a>';
}
?>
使用$_SESSION不是一个选项吗?我将这样标记会话变量:
$_SESSION['firstLogon'] = true;
然后每次运行时都可以检查该变量。当它没有设置(或不等于true),那么你可以运行你的mysql调用。
这样您就不需要额外的DB活动,您只需检查会话变量。