我有一个网站,要求用户在访问内容之前登录。在每个受保护的页面上,我都使用以下代码,当从浏览器访问时,它运行良好:
// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
header('Location: ./login.php');
}
// functions to display the page
display_page();
问题是,如果我使用cURL访问页面,则不会发生重定向,并且会返回内容。这关系到我…我该怎么办?
我尝试添加else if(isset($_SESSION['valid_user'])){//display page},但没有成功。
在当前状态下,您发送一个标头将用户重定向到登录页面,但您仍然提供页面内容。停止这样做,就像这样:
// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
header('Location: ./login.php');
// and get out of here if they aren't
exit();
}
// OK, they're logged in, let them see some content
// functions to display the page
display_page();
或
// check if they are logged in
if (!isset($_SESSION['valid_user'])) {
header('Location: ./login.php');
// and get out of here if they aren't
} else {
// OK, they're logged in, let them see some content
// functions to display the page
display_page();
}
据我所知,保护您的网站不被curl访问是不可能的。curl可以想出任何一种伪造的浏览器标识。除此之外,没有服务器能够安全地知道请求是否不是来自浏览器。
然而,如果你想让curl对标题做出反应,可以试试这个:
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
来自文档:
TRUE表示在服务器作为一部分发送的任何"Location:"标头后面HTTP头(注意这是递归的,PHP将跟随发送的"位置:"标头,除非CURLOPT_MAXREDIRS设置)。
有关更多详细信息,请参阅PHP文档