4

我正在创建一个在线 HTML5/Javascript 测验。我正在通过 Facebook 和 Twitter 分享测验的结果。消息是通过 Javascript 创建的,“我刚刚在 Y 个问题中答对了 X 个”

我想对 Google Plus 做同样的事情。但是,“片段”似乎是由页面上的 schema.org、Open Graph 或 Title/Description 标签生成的。此处的文档:https ://developers.google.com/+/plugins/snippet/

我以为我可以通过 PHP 中的查询字符串参数动态生成这些标签,但看起来 Google 缓存了页面。有任何想法吗?

PHP:

<?php 
$correct = strval($_GET['correct']);
$title = "I took the Quiz and answered " . $correct . " of 9 questions correctly.";
?>
<!DOCTYPE html>
<html>
    <head>
        <title><?php echo($title); ?></title>
        <meta property="og:title" content="<?php echo($title); ?>" />
    </head>
</html>

我动态创建 url .../share.php?correct=4

但是当我分享页面时,我看到了消息:

I took the Quiz and answered of 9 questions correctly.

它似乎没有显示动态数据。我假设是因为谷歌已经缓存了页面?

谢谢

4

2 回答 2

3

据我所知,加一按钮会缓存页面。fb like 按钮也是如此。你可能想试试这个

https://plus.google.com/share?url=http://example.com/share.php?correct=4

它成功了。希望这可以帮助

于 2012-10-26T15:19:14.460 回答
3

+1 按钮和共享对话框确实使用缓存。片段提取器应该尊重缓存控制指令,因此您应该能够通过提供必要的标头来防止缓存来实现您的目标。

在 PHP 中,以下代码使用必要的数据设置标头以防止缓存:

<?php
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

您也可以考虑做的其他事情是将随机生成的 ID 插入到查询字符串参数中,以便每次共享 URL 对提取器而言都是唯一的。

希望有帮助。

于 2012-10-26T16:22:15.833 回答