在继续到真实路径(如登录页面)之前,使所有链接流经 php 文件

Make all links flow through a php file before continuing to the real path (like a login page)

我有这个脚本

<?php
$username = "namey";
$password = "passy";
$salted = "salty";

if (isset($_COOKIE['Cookiename'])) {if ($_COOKIE['Cookiename'] == sha1($password.$salted)) {
?>
<body>
<span>
it works
</span></body>


<?php
      exit;} 
      else {
      echo "cookie error";
      exit;}}

if (isset($_GET['auth']) && $_GET['auth'] == "login") {
   if ($_POST['user'] != $username) {
      echo "username error";
      exit;}
      else if ($_POST['keypass'] != $password) {
      echo "password error";
      exit;}
      else if ($_POST['user'] == $username && $_POST['keypass'] == $password) {
      setcookie('Cookiename', sha1($_POST['keypass'].$salted));
      header("Location: $_SERVER[PHP_SELF]");}
      else {
      echo "server error";}}
?>
<div>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?auth=login" method="post">
<label>Username<input type="text" name="user" id="user" /></label><br/>
<label>Password<input type="password" name="keypass" id="keypass" /></label><br/>
<input type="submit" id="submit" value="Login"/>
</div>
</form>

& 基本上我需要网站上的每个 link 都来这里查看用户是否登录,然后再让他访问请求的页面。

如果您希望每个 页面都验证登录,则需要将此文件包含在您需要验证的所有其他脚本的顶部。

另一种方法是使用 PHP 的 auto_prepend_file 来...将其添加到您网站中的每个文件或您想要的子目录中。

我的回答

无论如何,如果用户已登录,我宁愿创建一个 cookie 来存储,并在每个页面中检查,如果用户未登录,则将他重定向到您发布的脚本。

像这样:

// cookies() is a function to validate your cookies..
if (!cookies()) {
    header('Location: YOUR_URL', true, 303;
    die();
}

检查 this link 关于 PHP 中的安全重定向。

另一种选择是在cookies()中添加重定向代码,这样你就可以只包含cookies()所在的文件,并在脚本顶部。

您可以创建一个主 php 文件并添加检查以查看用户是否已登录。

并在您要保护的每个脚本的顶部包含主 php 文件。

因此,如果您创建一个名为 check.php

的文件
//add this to the created file check.php
if (!isset($_COOKIE['loggedin']) && !$_COOKIE['loggedin']){
  header('Location: YOUR URL')
  die();
}

并添加此 setcookie('loggedin', true));

setcookie('Cookiename', sha1($_POST['keypass'].$salted));

之下

并在脚本顶部包含 check.php。

希望这对您有所帮助 :)