我有一个网站要求用户在访问内容之前登录。在每个受保护的页面上,我使用此代码,从浏览器访问时可以正常工作:
// 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'])){//显示页面},但这不起作用。
答案 0 :(得分:6)
在当前状态下,您发送标题以将用户重定向到登录页面,但您仍然提供页面内容。就这样停止这样做:
// 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();
}
答案 1 :(得分:0)
据我所知,保护您的网站不被curl访问是不可能的。 curl可以提出任何伪造的浏览器识别。除此之外,没有服务器可以安全地知道请求是否来自浏览器。
但是,如果您希望curl对标题做出反应,请尝试以下操作:
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
来自文档:
TRUE以跟随服务器作为部分发送的任何“Location:”标头 HTTP标头(注意这是递归的,PHP将遵循尽可能多的 除非CURLOPT_MAXREDIRS是,否则“Location:”标题将被发送 设定)。