0

我正在制作一个用户必须登录才能查看某些内容的网站。我通过将服务器根目录设置为C:\WAMP\www\public并将用户必须登录才能查看的所有文件放在不同的目录(即C:\WAMP\www\private)中来实现这一点。如果私有目录不在网络服务器上,登录用户如何访问私有目录中的文件?通过一个要求。

<?php
session_start();
$destination = $_GET['d'];
if(isset($_SESSION['loggedInUser']))
    require '../private/'.$destination;
else
    require 'signinrequired.html';
?>

但有一个问题。如果我需要一个脚本,那么它将不会被解释,因为它不在网络根目录中(如这里的答案中所述)。那么我该如何解决这个问题或完全重新设计系统呢?

解决方案:我感到困惑并编造了一个不存在的问题。可以通过将 HTML 文件存储在不在服务器根目录(也称为 Web 根目录,不管它叫什么)中并使用服务器根目录中的 PHP 文件包含它们来将 HTML 与 PHP 分开。由于 HTML 文件没有被解释(不是脚本),因此它可以工作。由于 PHP 文件由服务器解释,它们必须位于服务器根目录中,但由于它们被解释(并且源代码不只是提供给客户端),因此客户端无法看到程序的内部工作。如果其他人像我一样感到困惑,那么希望我能解释一下以解开他们的困惑。

4

2 回答 2

2

你为什么不把你所有的私人内容都放在网络根目录里,然后在每个私人页面上做这样的事情呢?

<?php 
   if(!$logged_in){ header("Location:restricted.php"); exit;}
?>
于 2013-02-08T23:29:05.660 回答
0

作为一个快速而肮脏的解决方案,您可以使用.htpasswdApache 别名的组合。作为一种解决方案,这不是非常可扩展的 - 您必须手动维护用户名列表并为您创建以明文形式发送的密码。很好,比如说,一个内部文档存储库。

如果您想要更具动态性和可扩展性的东西,那么无论您做什么,您当前的方法都将提供非常薄弱的​​保护。你最好加入Symfony 的安全包,甚至使用 Drupal 之类的 CMS。

于 2013-02-10T10:24:24.533 回答