
[英]PHP Header Location: ../location vs $_SERVER[DOCUMENT_ROOT]/location
[英]Php header location outside of web root
我有一个登录页面和一个会员页面。
网站根目录下的 login.php 页面:
include(ROOT_PATH.'server.php') ;//outside of web root
... login form:
<form method="post" action="login.php">
<div class="input-group">
<label>username </label>
<input type="text" name="username">
</div>
<div class="input-group">
<label>Password</label>
<input type="password" name="password" autocomplete="new-password">
</div>
<div class="input-group">
<button type="submit" class="btn" name="login_user">Login</button>
</div>
</form>
服务器.php
// LOGIN USER
if (isset($_POST['login_user'])) {
$username = $_POST['username'];
$pass = $_POST['password'];
//sanitize, check with database
//if password valid, redirect to member page
$_SESSION['username'] = $username;
$_SESSION['user_id'] = $user_id;
header('location:'.BASE_URL.'member.php');
exit;
}
我的问题:
我想将 member.php 放在 web root 之外,但我不知道 header('location.. 是否可以这样访问?
如果 member.php 必须在 web root 中,我怎样才能比当前更多地保护对此页面的访问?
成员.php
session_start();
if (!isset($_SESSION['username']) && !isset($_SESSION['user_id'])) {
header('location:login.php');
exit;
}
... rest of the code
我想将 member.php 放在 web root 之外
如果将文件member.php
放在 web 根目录之外,那么即使他们已通过身份验证,也没有人能够访问 URL /member.php
。
但我不知道 header('location.. 是否可以这样访问?
Location
标头指向 URL,而不是文件。 因此,如果您尝试重定向到的 URL 无法被任何人访问(因为您将其关联文件移到了 web 根目录之外),那么重定向将始终将所有人带到 404。
如果 member.php 必须在 web root 中,我怎样才能比当前更多地保护对此页面的访问?
当没有 session 时重定向回登录页面(就像您已经在做的那样)通常是处理这种情况的方式,对于简单的目的应该足够了。 此方法的主要缺点是您必须保持警惕并记住明确将此检查放入 web 根目录中的每个源文件中。
除此之外,您还可以探索大多数 MVC 框架都提供的前端 controller模式。 这通过一个单一的控制点汇集所有应用程序访问,并允许您将业务逻辑、配置和模板的源文件放在 web 根之外。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.