Легкий сценарий входа без базы данных

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

Хорошо, как насчет этого сценария, я просто сделал это, опираясь на мои знания в php.

<?php // Start session session_start(); // Username and password $ID = "admin"; $pass = "123456"; if (isset($_POST["ID"]) && isset($_POST["pass"])) { if ($_POST["ID"] === $anvandarID && $_POST["pass"] === $pass) { / $_SESSION["inloggedin"] = true; header("Location: safe_site.php"); exit; } // Wrong login - message else {$wrong = "Bad ID and password, the system could not log you in";} } ?> 

Safe_site.php содержит это и некоторое содержимое:

 session_start(); if (!isset($_SESSION["inloggning"]) || $_SESSION["inloggning"] !== true) { header("Location: login.php"); exit; } 

Это не идеальное решение, но вот быстрый и грязный пример, который показывает, как вы могли бы хранить данные входа в код PHP:

 <?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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <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> 

FacebookConnect или OpenID – два отличных варианта.

В основном, ваши пользователи регистрируются на других сайтах, в которых они уже являются членами (Facebook или Google), а затем вы получаете подтверждение с этого сайта, в котором говорится, что пользователь заслуживает доверия – начните сеанс, и они вошли в систему. если вы не хотите связывать больше данных с их учетной записью).

Я бы использовал настройку двух файлов следующим образом:

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 ?> в <?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; ?> 

Сохраните хэши имени пользователя и пароля в массиве в php-файле вместо db.

Когда вам нужно аутентифицировать пользователя, вычислите хэши его учетных данных, а затем сравните их с хэшами в массиве.

Если вы используете безопасную хеш-функцию (см. Хеш-функцию и хеш-алго в документации PHP), она должна быть довольно безопасной (вы можете использовать соленый хеш), а также добавить некоторые меры защиты к самой форме.

Если у вас нет базы данных, где будет храниться запись ПОСТОЯННОГО доступа к данным вашего пользователя? Конечно, во время входа в систему минимальная информация пользователя, необходимая для работы вашего сайта, может храниться в сеансе или в файле cookie. Но после того, как они выходят из системы, что тогда? Сеанс уходит, cookie может быть взломан.

Поэтому ваш пользователь возвращается на ваш сайт. Он пытается войти. Какая заслуживающая доверия вещь на вашем сайте сравнивает его данные для входа?

Попробуй это:

 <?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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <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"); //Replace with Logged Out page. Remove if you want to use HTML in same file. ?> // Below is not needed, unless header above is missing. In that case, put logged out text here. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <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> 

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

Вы можете контролировать доступ на уровне веб-сервера, используя HTTP-аутентификацию и htpasswd . С этим связано множество проблем:

  1. Это не очень безопасно (имя пользователя и пароль тривиально закодированы на проводе)
  2. Трудно поддерживать (вам нужно войти на сервер, чтобы добавить или удалить пользователей)
  3. У вас нет контроля над диалоговым окном входа, представленным браузером
  4. Невозможно выйти из системы, не перезапуская браузер.

Если вы не создаете сайт для внутреннего использования с несколькими пользователями, я бы не рекомендовал его.

*** Сценарий LOGIN, который не ссылается на базу данных или внешний файл. Хорошо для глобального пароля –

Разместить на странице формы входа – поместить это вверху страницы входа – выше всего остального ***

 <?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"); } ?> 

Нет причин не использовать базу данных для реализации входа в систему, по крайней мере, вы можете загрузить и установить SQLite, если ваша хостинговая компания не предоставит вам достаточное количество БД.