如何在不登录的情况下阻止用户浏览文件夹中的文档?

时间:2016-09-15 21:07:12

标签: php html css windows-server-2008-r2

例如,用户无法访问任何PHP文件,例如www.mywebsite.com/mypage.php 如果用户未登录,则会将用户重定向回登录页面。

问题是他们 能够访问以下网址:www.mywebsite.com/test/mydocument.pdf

如果他们没有登录,我如何拒绝访问并重定向到登录页面?

3 个答案:

答案 0 :(得分:0)

类似的问题在这里 php redirect if not logged in

只需查看会话

if(!isset($_SESSION['login'])){

header("Location: http://www.example.com/login.php");
}

此外,通过会话,您可以为用户设置权限,以根据其等级访问文件。

答案 1 :(得分:0)

我所做的是当用户登录时,我设置了一个会话变量,如此

$_SESSION['loggedin'] = true;

然后,在每个页面上,我都是在页面的非常开头

session_start();

if(!isset($_SESSION['loggedin'] || $_SESSION['loggedin'] !== true){
    header('Location: http://www.foo.com/login.php');
    exit();    <-- THIS IS VERY IMPORTANT
}

确保包括exit();功能调用。否则,客户端可以拒绝重定向请求,并且页面的其余部分将呈现。这样,即使客户端拒绝重定向请求,他们获得的只是一个空白页面。玩得开心:)

PS:如果你想聪明并且不想重复代码,可以创建一个名为“functions.php”的PHP文件(或者你喜欢的类似的东西)。然后,在functions.php内部创建一个名为“requireLogin()”的函数

function requireLogin(){
    if(!isset($_SESSION['loggedin'] || $_SESSION['loggedin'] !== true){
        header('Location: http://www.foo.com/login.php');
        exit();    <-- THIS IS VERY IMPORTANT
    }
}

现在,在您要保护的每个页面中,执行此操作

session_start();
require('functions.php');
reuireLogin();

BOOM页面受到保护,页面的开头看起来更清晰。

答案 2 :(得分:0)

我确信这个问题有多种解决方案。我发现自己最常做的就是如下:

  1. 将静态文件存储在公开的网站文件夹树之外,这样用户就无法直接导航到该网址。
  2. 写一个php页面,其目的是“下载”页面。此页面将检查会话,就像您在其他php页面上一样,并将从您在Web根目录之外存储的位置读取该文件。
  3. 应该有很多关于如何从php发送文件到浏览器的例子,所以我不会在这里讨论,但是你应该知道肯定存在必须减轻的安全风险以确保用户只下载您希望他们有权访问的文件。