谷歌浏览器url


Google Viewer url

任务:在google查看器中查看pdf,用户无法在视图源中看到原始pdf路径/url。所以我决定通过使用session

在php中传递pdf url

viewer.php

<?php
session_start();
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf';
?>
<iframe src="http://docs.google.com/viewer?url=http://sitename.com/pdf.php&embedded=true" width="600" height="780" style="border: none;"></iframe>

pdf.php

<?php
session_start();
header('Content-type: application/pdf');
readfile($_SESSION['url']);
?>

我检查在pdf.php会话变量使用var_dump,它返回http://research.google.com/archive/bigtable-osdi06.pdf正确,但不工作在谷歌浏览器。

但是当我把url直接读文件,它的工作。如

readfile('http://research.google.com/archive/bigtable-osdi06.pdf');

$a = 'http://research.google.com/archive/bigtable-osdi06.pdf';
readfile($a);

请帮助我,为什么会话变量不工作在readfile

对不起,我的英文

假设这是错误的cookie (session)上下文。当设置$_SESSION时,浏览器是客户端A。然后你打开iframe并要求http://docs.google.com/viewer?通过谷歌下载你的pdf.php作为客户端B(检查你的http服务器日志,有两个ip),并把结果作为浏览器的查看器应用程序,,但你没有为客户端B设置cookie 。你应该做的:
看起来你需要使用rawurlencode()在iframes url中设置会话id。

viewer.php

<?php
session_start();
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf';
?>
<iframe src="http://docs.google.com/viewer?url=<?php 
    // set current session_id for feature Google GET request
    echo rawurlencode("http://sitename.com/pdf.php?PHPSESSID=".session_id()); 
  ?>&embedded=true" width="600" height="780" style="border: none;"></iframe>

pdf.php

<?php
session_id($_GET['PHPSESSID']); // we use $_GET, not COOKIE
session_start();
header('Content-type: application/pdf');
readfile($_SESSION['url']);

session_start()本身是对会话密钥进行特定cookie处理的包装器。它可以由session_set_save_handler()定义。简而言之,它也修改了标题。

如果你在php脚本的顶部使用session_start(),并且在脚本的后面有header()调用用于文件下载,那么你必须添加某种形式的缓存控制以使IE正常工作。我使用header('Cache-Control: public');紧跟在脚本顶部的代码之后,使用session_start()调用验证我有一个正确登录的用户。这允许header()和fpassthru()调用使用IE 5.5 SP2在脚本中下载文件。