使用$ _COOKIE var来保存重要数据

时间:2011-07-15 12:55:17

标签: php cookies wordpress-plugin

我正在创建一个wordpress插件。我正在写的所有函数都被“挂钩”到某些wordpress事件中。这意味着我很难创建需要在多个函数中使用的变量。

例如:

有两个函数挂在某处:

Display_if_facebook_connected() { 
   if (Check_facebook_connected()) { return 'Yes, connected!' } 
   return ''; 
} 

Display_if_facebook_connected() { 
   if (!Check_facebook_connected()) { return 'No, not connected!' } 
   return ''; 
} 

他们都有很重要的功能:

Check_facebook_connected() { // some heavy facebook connect stuff, return bool } 

我基本上试图避免重功能运行两次,因为它会有相同的结果。

在这种情况下,执行$_COOKIE['check_facebook_connected'] = true;然后在Display_if_facebook_connected()中读取该变量是否安全?

安全我的意思是用户无法查看或更改值。由于实际上没有设置cookie ,我认为/希望它在php代码的最后消失。

如果有更好的方法或更好的var,我不会感到惊讶,但是由于我对php的理解有限,我想不出任何。

更新 关于会话:我不需要将值保留在多个页面上,只需要一页加载。由于Wordpress不使用会话,我认为没有理由改变它。

我试验了一下,问题仍然存在:

以下所有代码都在我的wordpress插件的主文件中。我理解它的方式,插件文件在每个请求都被“包含”,所以每次刷新我的testpost时都会运行所有代码。

首先我创建变量:

 $myplugin_connected = false;

然后我将我的功能挂钩在正确的位置:

add_shortcode( 'myplugin_notconnected', 'myplugin_notconnected_func' );

这基本上将myplugin_notconnected_func()函数挂钩到[myplugin_notconnected]短代码中。 短代码是wordpress帖子中的文字,[] -brackets之间有一些ID。无论何时出现,Wordpress都会加载与短代码相关的代码。)

这是myplugin_notconnected_func()

function myplugin_notconnected_func( $atts, $content = null ) {
    echo '<p>connected: ' . var_export($myplugin_connected, true)  . '</p>';
    return '$contents';
}    

这是结果:

  

已连接:NULL

这就是我尝试使用$ _COOKIE变量的原因,因为至少它们会在整个php实例上持续存在。我为缺乏连贯性而道歉,我正在学习,我非常感谢你的帮助!

3 个答案:

答案 0 :(得分:3)

Display_if_facebook_connected() { 
   $result = Check_facebook_connected();
   if (!$result) { return 'No, unconnected!' } else { return 'Yes, connected!' } 
} 


$connected = Display_if_facebook_connected();

答案 1 :(得分:1)

session_start();
Check_facebook_connected()
{
    if(isset($_SESSION["is_facebook_connected"])) return ($_SESSION["is_facebook_connected"] === true);
    // if we get here we haven't checked the facebook connection status, so do it
    ...
}

答案 2 :(得分:1)

范围

参考问题的更新部分:

定义

$myplugin_connected = false;

并在后续

中获得NULL
var_export($myplugin_connected, true)

可能意味着,您要么在全局范围之外定义$myplugin_connected (例如在函数而不是main中),或者在全局范围内定义了,但在unset($myplugin_connected)之前的某个地方有一些var_export。在这两种情况下,var_export的返回值都是NULL

在你的情况下,我相信前者更可能。你可以使用:

$GLOBALS['myplugin_connected'] = false;

var_export($GLOBALS['myplugin_connected'], true)

在您的短代码处理程序中可以使用连接状态(之前已经通过“重”功能确定过一次)。

曲奇

回答你的原始问题:

  

在这种情况下,这样做是否安全   $ _COOKIE ['check_facebook_connected'] = true;然后阅读   Display_if_facebook_connected()?

中的变量

嗯,$_COOKIE是服务器端superglobal,所以是的,只要您从未在响应中实际发送/设置该cookie,用户就不会看到,也无法更改它。

就个人而言,使用$_COOKIE来保存仅对单页加载有效的状态,对我来说感觉完全没错。

我建议至少$GLOBALS使用$_COOKIE - 或者甚至可以更好地使用static变量而不是超级全局 - 例如像这样的东西:

function isConnected() {
    static $bConnected = null;
    if ($bConnected === null)
        $bConnected = Check_facebook_connected();
    return $bConnected;
}

但这总是在旁观者的眼中^^