Справочники, инструменты, документация

PHP: Вход в систему без базы данных

Как создать простой сценарий входа в систему, который не требует наличия базы данных.

Способ 1

<?php
session_start();

$userinfo = array(
        'user1'=>'password1',
        'user2'=>'password2'
        );

if(isset($_GET['logout'])) {
  $_SESSION['username'] = '';
  header('Location: ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
  if($userinfo[$_POST['username']] == $_POST['password']) {
    $_SESSION['username'] = $_POST['username'];
  }else {
    //Invalid Login
  }
}
?>
<!doctype html>
<html>
  <head>
    <title>Login</title>
  </head>
  <body>
    <?php if($_SESSION['username']): ?>
      <p>You are logged in as <?=$_SESSION['username']?></p>
      <p><a href="?logout=1">Logout</a></p>
    <?php endif; ?>
    <form name="login" action="" method="post">
      Username: <input type="text" name="username" value="" /><br />
      Password: <input type="password" name="password" value="" /><br />
      <input type="submit" name="submit" value="Submit" />
    </form>
  </body>
</html>

Способ 2

Использование двух файлов:

index.php

<?php 
session_start(); 

define('DS', TRUE); // used to protect includes
define('USERNAME', $_SESSION['username']);
define('SELF', $_SERVER['PHP_SELF'] );

if (!USERNAME or isset($_GET['logout']))
 include('login.php');

// everything below will show after correct login 
?>

login.php

<?php defined('DS') OR die('No direct access allowed.');

$users = array(
 "user" => "userpass"
);

if(isset($_GET['logout'])) {
  $_SESSION['username'] = '';
  header('Location: ' . $_SERVER['PHP_SELF']);
}

if(isset($_POST['username'])) {
  if($users[$_POST['username']] !== NULL && $users[$_POST['username']] == $_POST['password']) {
 $_SESSION['username'] = $_POST['username'];
 header('Location: ' . $_SERVER['PHP_SELF']);
  }else {
    //invalid login
 echo "<p>error logging in</p>";
  }
}

echo '<form method="post" action="'.SELF.'">
 <h2>Login</h2>
 <p><label for="username">Username</label> <input type="text" id="username" name="username" value="" /></p>
 <p><label for="password">Password</label> <input type="password" id="password" name="password" value="" /></p>
 <p><input type="submit" name="submit" value="Login" class="button"/></p>
 </form>';
exit; 
?>

Способ 3

<?php
    session_start();
    $userinfo = array(
      'user'=>'5d41402abc4b2a76b9719d911017c592', //Hello...
    );

    if(isset($_GET['logout'])) {
      $_SESSION['username'] = '';
      header('Location: ' . $_SERVER['PHP_SELF']);
    }

    if(isset($_POST['username'])) {
      if($userinfo[$_POST['username']] == md5($_POST['password'])) {
        $_SESSION['username'] = $_POST['username'];
      }else {
        header("location:403.html"); //replace with 403
      }
    }
?>

<?php if($_SESSION['username']): ?>
  <!doctype html>
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Logged In</title>
    </head>

    <body>
      <p>You're logged in.</p>
      <a href="logout.php">LOG OUT</a>
    </body>
  </html>

<?php else: ?>
  <html>
    <head>
      <title>Log In</title>
    </head>
    <body>
      <h1>Login needed</h1>
      <form name="login" action="" method="post">
        <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
          <tr>
            <td colspan="3"><strong>System Login</strong></td>
          </tr>
          <tr>
            <td width="78">Username:</td>
            <td width="294"><input name="username" type="text" id="username"></td>
          </tr>
          <tr>
            <td>Password:</td>
            <td><input name="password" type="password" id="password"></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input type="submit" name="Submit" value="Login"></td>
          </tr>
        </table>
      </form>
    </body>
  </html>
<?php endif; ?>

И файл выхода из системы, что-то вроде этого logout.php:

<?php
  session_start();
  session_destroy();
  header("location:index.html"); // Замените на страницу выхода из системы. Удалите, если вы хотите использовать HTML в том же файле
?>

<!-- Ниже не требуется, если только заголовок выше не отсутствует. В этом случае разместите здесь текст выхода из системы -->
<!doctype html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
  </head>
  <body>
    <!-- Put logged out message here -->
  </body>
</html>

Способ 4

Cкрипт, который не связан с базой данных или внешним файлом. Хорошо подходит для глобального пароля. Место на странице формы входа - поместите в верхней части страницы входа - выше всего else.

<?php

if(isset($_POST['Login'])){

if(strtolower($_POST["username"])=="ChangeThis" && $_POST["password"]=="ChangeThis"){
session_start();
$_SESSION['logged_in'] = TRUE;
header("Location: ./YourPageAfterLogin.php");

}else {
$error= "Login failed !";
}
}
//print"version3<br>";
//print"username=".$_POST["username"]."<br>";
//print"password=".$_POST["username"];
?>

Чтобы войти поместите в верхней части каждой страницы, которая должна быть защищена логином, это проверяет сеанс и если имя пользователя и пароль есть.

<?php
session_start();
if(!isset($_SESSION['logged_in']) OR $_SESSION['logged_in'] != TRUE){

header("Location: ./YourLoginPage.php");
}
?>