2013-01-06 54 views
1

我有以下代码:的file_get_contents和浏览器会话

$homepage = file_get_contents("https://example.com/specific_page"); 
echo $homepage; 

浏览器已经有我需要访问,所以如果我打开新的标签页的网址,页面才能正确显示在网站的会话加载。

问题是,PHP脚本,重定向到“你没有登录”页面。请注意,即使在重新启动浏览器后,该url仍然可用。

任何想法如何获得内容,而无需编写登录到网站的代码?

+0

听起来像xyz.com使用cookie来制作持久性数据。您的域(运行php脚本)根本无法访问该会话。这是一项安全措施。 – Lix

+0

*“任何想法如何获得内容,而无需编写登录到站点的代码?”*如果站点要求您登录,则不需要登录 – 2013-01-06 23:21:18

+0

您还需要将会话凭证/令牌传递到页面,例如,通过Cookie请求头或URL上的某个查询参数 - 取决于该网站如何处理会话。如果会话绑定到远程IP,您可能无法劫持会话(您可以将其称为会话锁定,了解其工作原理,同样的原理适用于此)。 – hakre

回答

3

PHP运行服务器端,所以它有自己的会话处理,没有链接到您的浏览器会话。您可以使用cURLoptions类似CURLOPT_COOKIEJAR来执行此操作。通过cURL,您可以通过PHP登录并保留您请求的网站的PHP会话。你会在我链接的cURL文档中找到一堆例子。

3

如果一个网站可以访问任意外部网站上的数据,这将是一个巨大的安全问题。想象一下:file_get_contents('https://yourbank.com/all-your-details')

要做到这一点,唯一的方法是向用户询问他/她在外部网站上的登录凭据并手动登录。然而,这将是不可靠的,因为认证过程可能会改变(并且要求某人输入他/她的密码是非常不礼貌的)。

这通常是Web服务API的用途,但如果没有可供您感兴趣的网站可用,那么您会遇到困难。


如果你已经知道了网站的登录凭据,那么你可以硬编码到他们使用Blauesocke所概述的方法的脚本,但如果细节是唯一的当前用户这是不行的。

+0

似乎你是对的,因为@hakre提到我需要通过凭据,然后请求具体页面。我将需要就如何实现这一点做更多的研究。 – user1359575