Регистрация на вашем сайте через PHP

4 October 2018

Привет, я Виктор, веб-программист пишущий на Дзене потому что меня никто не пригласил на хабр.

Сегодня я покажу, как сделать регистрацию и авторизацию.

Ps: Вам никто не даст такую защиту от взлома как в Google или хотя бы ВКонтакте. Для крупных сайтов нанимайте профессионального веб-программиста.

1. Как правильно настроить форму

Самый простой способ передачи данных — <form action="">
Также можно передавать данные через xmlhttprequest чтобы страница не перезагружалась

Мы будем передавать данные с помощью POST-запроса. Пример простой формы:

1 — С помощью имен мы будем получать значения в скрипте
2 — Чтобы вместо букв были точки
3 — Пример: "./login.php"
4 — Перевод строки
1 — С помощью имен мы будем получать значения в скрипте
2 — Чтобы вместо букв были точки
3 — Пример: "./login.php"
4 — Перевод строки
<form method="post" action="Путь к вашему PHP скрипту">
<input name="login"/><br>
<input name="password" type="password"/><br>
<input type="button" value="Отправить"/>
</form>

2. MySql

Далее вам нужно настроить БД сайта. Тут я пропущу шаги до входа в PhpMyAdmin.

Создайте две таблицы: auth и session

В auth будут записываться данные для входа, в session сессии.
Про сессии смотрите на моем канале.

В auth добавьте два столбца: login и password.

3. PHP

Следующая программа авторизует пользователя

<?php
$nickname = $_POST['login'];
$password = $_POST['password'];

login и password — имена input-элементов

if ($nickname == "" || $password == "") {
header('Location: ./login.html?incorrect=empty');

Проверяем поля на заполненность, если одно из полей пустое — переадресуем пользователя обратно с ошибкой. Параметр incorrect можно отследить с помощью JavaScript

} else {
$hostnamedb = "localhost";
$databasedb = "Имя вашей базы данных";
$usernamedb = "Имя пользователя";
$passworddb = "Пароль к базе данных";
$connect = mysqli_connect($hostnamedb, $usernamedb, $passworddb, $databasedb);

Выполняем подключение к БД, все данные лучше уточнить у поддержки, в этом реально трудно разобраться.

if (mysqli_connect_errno()) {
header('Location: ./login.html?incorrect=mysql');
}

Если произошла ошибка при подключении

$pwdconnect = mysqli_query($connect, "SELECT `password` FROM `auth` WHERE `login` = '$nickname' LIMIT 1");

Выполняем команду. Все команды обязательно тестируйте в phpmyadmin. Эта команда берет ячейку из столба password из таблицы auth у которой сосед в столбце login является $nickname

$pwd=mysqli_fetch_array($pwdconnect,MYSQLI_NUM);

Преобразовывает нечто из ответа mysql в человеческий текст

if($password == $pwd[0]){

Без LIMIT = 1 мы бы могли получить много ячеек с такими же условиями, поэтому fetch array выводит ответ в массив.

$ssid = rand(111111111, 999999999999999999);
$info = $nickname.' '.некоторая другая ваша информация;
file_put_contents("./sessions/".$ssid.".ssid", $info);
header('Location: ../success.html?ssid='.$ssid);
} else {
header('Location: ./login.html?incorrect=1');
}
}
?>

Теперь самое интересное: создание сессии. Без них никак.
Сначала мы генерируем уникальный номер сессии.
Не делайте как я, проверяйте номер на существование! Нормальные сайты генерируют номер с буквами через специальный алгоритм, но у меня то ненормальный сайт)

Но самое главное — НИКОГДА не записывайте секретную информацию в файлы, записывайте сессии в MySql.

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

4. Куки

На Дзене тоже есть свои куки. Стоп... "mda"?
На Дзене тоже есть свои куки. Стоп... "mda"?

Куки — обязательная часть авторизации. Куки легко записать с JavaScript:

var urlParams = new URLSearchParams(window.location.search);
var ssid = 0;
if (urlParams.toString() != ""){
ssid = urlParams.toString();
ssid = ssid.slice(5,ssid.lenght);
}
document.cookie = 'MyCookiesAuth' +"=" + ssid + ";";
document.location = "auth/profile.html";

Кроме последних двух строк лучше ничего не изменять — может сломаться.

5. Получение данных с идентификатором

JavaScript:

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return 'abcde';
}
var ssid = readCookie('MyCookiesAuth');

Дальше делайте с ssid все что захотите. Например

doument.getElementById("avatar").src = "../img/avatar/"+ssid+".jpg";

6. Выход

Чтобы добавить ссылку для выхода из аккаунта, перенаправьте пользователя на страницу с данным скриптом:

function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}

var ssid = readCookie('MyCookiesAuth');
var xhr2 = new XMLHttpRequest();
xhr2.open('GET', "auth/deletesession.php?ssid="+ssid);
xhr2.send();
var name = 'MyCookieAuth';
var value = '0';
document.cookie = name + '='+value+';';
document.location = "auth/login.html";

Также создайте PHP скрипт:

<?php
$ssid = $_GET['ssid'];
unlink("./session/".$ssid.".ssid");
?>

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

Также скачивайте мою игру, смотрите мой канал на YouTube и читайте ВК.