Всех друзей поздравляем с Новым годом! Всего вам самого наилучшего! Всех благ, здоровья а материальное приложится!
СКРИПТЫ althtmlcssphpjsblog

Система авторизации для админа DW ADMIN v1.1.

Поддержи проект!!!

Мы уже много раз делали разные входы для админа , но именно входа-то и не было!

Т.е. был какой-то полуфабрикат, в котором было фиг разобраться!

Сейчас - это просто и понятно! В чем смысл!?

Тестирование DW ADMIN v1.1.

Просто берем скрипт и бросаем в папку, после чего - просто входим в админку!

Где скачать систему авторизации для админа DW ADMIN v1.1.

После текста есть ссылка на скачивание данного архива! + отдельная кнопка в списке всех скриптов

Навигация по странице :
  1. Состав архива:
  2. Как работает система авторизации DW ADMIN v1.1
  3. Файл с данными системы авторизации config.php
  4. Файл входа системы авторизации index.php
  5. Файл выхода из системы авторизации админа logout.php
  6. Файл для хранения данных админа lp.dat
  7. Файл стилей style.css
  8. Тестовая страница test.php
  9. Файл для шифрования данных translit_1_4.php
  10. Скачать можно здесь


    Состав архива:

  1. Состав архива показывается вживую из папки... с помощью функции Scandir
    .htaccess
    Jura-Light.ttf
    back.png
    config.php
    index.php
    logout.php
    lp.dat
    style.css
    test.php
    translit_1_4.php


    Как работает система авторизации DW ADMIN v1.1

  2. О каких нюансах нужно сказать, кроме того, что сказано в видео!?

    test.php Вам нужен файл test.php, в котором продемонстрирована сущность входа в
    DW ADMIN

    Если вам требуется перевести права админа на стороннюю страницу, то:

    Сверху страницы запускаем сессию
    Вариант №1

    session_start();

    if($_SESSION[$name_login])

    {

    Сюда помещаем закрытые данные, скрипты, все, что должен увидеть только админ.

    }

    else

    {

    Сюда помещаем данные, которые будут видеть пользователь.

    }

    Вариант №2 Можно использовать без else

    session_start();

    if($_SESSION[$name_login])

    {

    Сюда помещаем закрытые данные, скрипты, все, что должен увидеть только админ.

    }


    Файл с данными системы авторизации config.php

  3. Если по какими-то причинам вам нужно изменить имя сессии админа, то вам нужна переменная $name_login,

    по умолчанию $name_login = dw_login, другими словами сессия админа выглядит таким образом:

    $_SESSION['dw_login']

    Вся страница

    <? session_start ();

    $name_login = 'dw_login';

    $DIR = __DIR__;

    $DIR_LP = $DIR.'/lp.dat';

    include($DIR.'/translit_1_4.php');

    $lp = @file_get_contents($DIR_LP);

    $name_site = $_SERVER["HTTP_HOST"];

    $domen = $_SERVER["HTTP_X_FORWARDED_PROTO"].'://'.$_SERVER["HTTP_HOST"];

    $real_page = $domen. parse_url( strip_tags($_SERVER['REQUEST_URI']) , PHP_URL_PATH);

    $dirname = dirname($_SERVER['REQUEST_URI']);

    $test = $domen . $dirname.'/test.php';

    $logout = $domen . $dirname.'/logout.php';

    $index = $domen . $dirname.'/index.php';


    Файл входа системы авторизации index.php

  4. Живой пример работы входа в админку DW ADMIN v1.1 - поскольку данные уже записаны, то данные для входа:
    TEST - логин
    Пример - секретное слово
    12345 - пароль

    Если по какими-то причинам вам нужно изменить значение передаваемое в сессию админа, то вам нужна переменная

    $login в строке(если выбрано секретное слово) номер 67 и строка 79 если выбрано скрыть форму.

    По умолчанию будет передавать значение, которое есть в переменной $login - это зашифрованные(файл translit_1_4.php) данные из поля login

    Весь файл

    <?

    include(__DIR__.'/config.php');

    if($lp)

    {

    $get_lp = explode('::', $lp);

    $salt = $get_lp[0];

    $login_get = $get_lp[1];

    $pass_get = $get_lp[2];

    }

    else

    {

    $salt = md5 ( date('d.m.Y')); // $salt = md5 ( date('01.10.2019'));

    }

    $login = ahead( trim( strip_tags( $_POST ['login'])));

    $pas = md5 ( trim( strip_tags( $_POST ['pas'])) .$salt);

    $pas2 = md5 ( trim( strip_tags( $_POST ['pas2'])) .$salt);

    $sekretnoe_slovo = trim ( strip_tags( $_POST ['sekretnoe_slovo']));

    $sekretnoe_slovo_2 = trim ( strip_tags( $_POST ['sekretnoe_slovo_2']));

    if($_POST['SECRET_OR_hide_form'])

    {

    $hide_form = strip_tags( $_POST['hide_form'] );

    if(($sekretnoe_slovo and $hide_form) or (!$sekretnoe_slovo and !$hide_form))

    {

    $rezult = 'Нужно выбрать одно поле!';

    }

    else

    {

    if($sekretnoe_slovo != $sekretnoe_slovo_2)

    {

    $rezult = 'Слова не равны!';

    }

    else

    {

    if($sekretnoe_slovo){$word = ahead($sekretnoe_slovo).'::secret_word';}else{$word = 'close_form';}

    $_SESSION['SECRET_OR_hide_form'] = $word;header("Refresh: 0");

    }

    }

    }

    if($_POST['do_lp'])

    {

    if($pas != $pas2 )

    {

    $rezult = 'пароли не равны!';

    }

    else

    {

    $data = $salt.'::'. $login.'::'.$pas.'::'.$_SESSION['SECRET_OR_hide_form'] ;

    $lp = @file_put_contents($DIR_LP, $data);

    if($lp){$rezult = 'данные записаны';header("Refresh: 1");}

    else{$rezult = 'не получилось записать -повторите опреацию!'; }

    }

    }

    if($_POST['avtorization'] and $lp)

    {

    if(substr_count($lp, 'secret_word')) { $get_secret = $get_lp[3];}

    if($get_secret)

    {

    if($pass_get == $pas and $login_get == $login and ahead($sekretnoe_slovo) == $get_secret)

    {

    $_SESSION[$name_login] = $login; //первый вариант сессии

    @SetCookie( $name_login , $login_get .'_'. $pass_get ,time()+(365*24*60*60), "/", $name_site , 0) ;

    }

    else

    {

    $rezult = 'Либо: 1.логин, 2.пароль, 3.секретное слово - не верно!';

    }

    }

    else

    {

    if($pass_get == $pas and $login_get == $login)

    {

    $_SESSION[$name_login] = $login; //второй вариант сессии

    @SetCookie( $name_login , $login_get .'_'. $pass_get ,time()+(365*24*60*60), "/", $name_site , 0) ;

    }

    else

    {

    $rezult = 'Либо: 1.логин, 2.пароль не верно!';

    }

    }

    }

    if(substr_count($lp, 'secret_word')) { $_SESSION['SECRET_OR_hide_form']= 1;}

    if(!$_SESSION['SECRET_OR_hide_form'])

    {

    $title = 'Нужно выбрать или или'; $var = 'SECRET_OR_hide_form';

    $ad_form = '<input type="password" name="sekretnoe_slovo" placeholder="cекретное слово">

    <input type="password" name="sekretnoe_slovo_2" placeholder="слово второй раз">

    <flex><input type="checkbox" name="hide_form" value="hide_form"> Скрыть форму</flex>';

    $height=300;

    }

    elseif(!$lp and $_SESSION['SECRET_OR_hide_form'])

    {

    $title = 'Создать пароль и логин'; $var = 'do_lp';

    $ad_form = '<input type="text" name="login" placeholder="логин" required>

    <input type="password" name="pas" placeholder="пароль" required>

    <input type="password" name="pas2" placeholder="повторите пароль" required> ';

    $height=300;

    }

    elseif($lp and !$_SESSION[$name_login])

    {

    $title = 'Авторизация'; $var = 'avtorization';

    $ad_form = '<input type="text" name="login" placeholder="логин" required>

    <input type="password" name="pas" placeholder="пароль" required> ';

    $height =220;

    if(!substr_count($lp, 'close_form')) { $ad_form .= '<input type="password" name="sekretnoe_slovo" placeholder="cекретное слово" required>'; $height=300;}

    }

    elseif($lp and $_SESSION[$name_login])

    {

    $rezult = 'вы авторизованы';

    header("Location: $test ");// header("Location: $domen ");

    }

    else

    {

    die('какого?');

    }

    if($_SESSION[$name_login] and !$_COOKIE[$name_login])

    {

    $get_lp = explode('::', $lp);

    $salt = $get_lp[0];

    $login_get = $get_lp[1];

    $pass_get = $get_lp[2];

    $do_COOK = @SetCookie($name_login,$login_get.'_'.$pass_get,time()+(365*24*60*60),"/",$name_site,0);

    if($do_COOK){header("Location: $test ");}

    }

    if($_COOKIE[$name_login] and !$_SESSION[$name_login])

    {

    $del_COOK = explode('_', $_COOKIE[$name_login]);

    $get_lp = explode('::', $lp);

    $salt = $get_lp[0];

    $login_get = $get_lp[1];

    $pass_get = $get_lp[2];

    if($login_get == $del_COOK[0] and $pass_get == $del_COOK[1]){$_SESSION[$name_login] = $login_get; header("Location: $test ");}

    }

    if(substr_count($lp, 'close_form') and $real_page == $index and !$_SESSION[$name_login] and !$_SESSION['SECRET_OR_hide_form']){ header("Location: $domen "); exit;}

    if($rezult){ $hideMe = ' style="display: block;" id="hideMe"';}

    ?>

    <!DOCTYPE html>

    <html lang="en">

    <head>

    <meta charset="UTF-8">

    <title><? echo $title; ?></title>

    <link rel="stylesheet" type="text/css" href="<? echo $domen . $dirname;?>/style.css">

    </head>

    <body>

    <rezult<? echo $hideMe; ?>><? echo $rezult; ?></rezult>

    <block>

    <form method="post" style="height:<?echo $height;?>px">

    <h2><? echo $title ; ?></h2>

    <? echo $ad_form ; ?>

    <button type="submit" name="<? echo $var;?>" value="<? echo $var;?>">отправить</button>

    </form>

    </block>

    </body>

    </html>


    Файл выхода из системы авторизации админа logout.php

  5. Файл logout.php предназначен для ликвидации всех сессий и кук, которые установлены.

    <? include(__DIR__.'/config.php');

    if(!$_SESSION[$name_login])

    {

    $info = 'Для того, чтобы выйти – надо сперва войти!';

    }

    else

    {

    session_destroy ();

    @SetCookie( $name_login , '' , time()+(365*24*60*60), "/", $name_site , 0) ;

    $info = 'Вы вышли';

    }

    ?>

    <html>

    <head>

    <title>Выход</title>

    <meta http-equiv='Refresh' content='3; URL=<? echo $index ;?>'>

    <meta charset="utf-8">

    <? echo $info;?>

    </body>

    </html>


    Файл для хранения данных админа lp.dat

  6. Файл lp.dat - создается в момент отправки данных на сервер. Сейчас данные отображаются. потому, что данные были созданы для того, чтобы вы смоли протестировать вход!

    Если вы выбирает не показывать форму при первом вводе данных, то если куки и сессия умрут, то вы никак войти не сможете... это сделано для безопасности! И... заходим на сревре удаляем данный файл lp.dat и возвращаемся на страницу авторизации!

    4aac041f8c05df149eb31f774a5c746a::ᵩᵚᵨᵩ::63f854dd4f76f09fb0907cfa52d95561::ᶾᶞᶑᶛᶎᶞ::secret_word


    Файл стилей style.css

  7. Файл стилей системы авторизации для админа нужны для отображения в браузере

    raund {

    display: block;

    border: 1px solid darkgrey;

    padding: 12px 0;

    margin: 10px 0;text-align: center;

    }input[type="checkbox"] {

    width: 33px;

    }raund span {

    border-bottom: 1px solid #bbbbbb;

    display: block;

    padding-bottom: 7px;

    margin-bottom: 10px;

    }flex {

    display: flex;

    TEXT-TRANSFORM: lowercase;

    PADDING-TOP: 10PX;

    }

    @font-face {

    font-family: Jura Light;

    src: url(Jura-Light.ttf);

    }

    body, input,button {

    font-family: 'Jura Light';

    font-size: 16px;

    }

    body::before {

    content: "";

    position: fixed;

    left: -50px;

    right: -50px;

    top: -10px;

    bottom: 0px;

    z-index: -1;

    background: url(back.png)center/cover no-repeat;

    filter: blur(10px);

    height: 110%;

    opacity: 0.5;

    }

    block {

    text-transform: uppercase;

    font-weight: 100;

    }

    form {

    position: absolute;

    display: inline-grid;

    top: 50%;

    left: 50%;

    width: 320px;

    border: 1px solid #cecece;

    padding: 50px;

    transform: translate(-50%,-50%); background-color: #fafafa;

    opacity: 0.7;

    }input {

    width: 319px;

    border-bottom: 1px solid #d6d6d6;

    border-top: 0px;

    border-left: 0px;

    border-right: 0px;

    outline: none; text-indent: 13px;

    }form h2 {

    font-family: 'Jura Light';

    font-size: 26px;

    text-align: center;

    border-bottom: 1px solid #d4d4d4;

    color: #7e7e7e;

    font-weight: 100;

    text-shadow: 4px 4px 4px #aaa;

    margin: 21px 0 10px 0;

    }button#submit {

    height: 46px;

    margin-top: 10px;

    cursor: pointer;

    padding: 10px;

    color: rgb(68,68,68);

    text-decoration: none;

    outline: none;

    border: 1px solid rgba(0,0,0,.1);

    border-radius: 2px;

    background: rgb(245,245,245) linear-gradient(#f4f4f4, #f1f1f1);

    transition: all .218s ease 0s;

    }button#submit:hover{

    color: rgb(24,24,24);

    border: 1px solid rgb(198,198,198);

    background: #f7f7f7 linear-gradient(#f7f7f7, #f1f1f1);

    box-shadow: 0 1px 2px rgba(0,0,0,.1);

    }

    rezult {

    z-index: 10000;

    display: none ;

    position: absolute;

    left: 50%;

    transform: translate(-50%);

    border: 1px solid #a9a9a9;

    padding: 17px;

    background: #fbfbfb;

    font-size: 15px;

    color: #868686;

    font-family: monospace;

    box-shadow: 0 0 10px rgba(194, 160, 195, 0.5);

    }

    #hideMe {

    -moz-animation: cssAnimation 0s ease-in 3s forwards;

    -webkit-animation: cssAnimation 0s ease-in 3s forwards;

    -o-animation: cssAnimation 0s ease-in 3s forwards;

    animation: cssAnimation 0s ease-in 3s forwards;

    -webkit-animation-fill-mode: forwards;

    animation-fill-mode: forwards;

    }

    @keyframes cssAnimation { to {top: -60px; }}@-webkit-keyframes cssAnimation { to {top: -40px; }}

    red{color:red;}fio{color:violet;}block {

    display: block;

    margin: auto;

    width: 600px;

    }login {

    display: block;

    padding: 17px;

    border: 1px solid #bfbfbf;

    margin: 10px 0;

    }a {

    color: #9e9e9e;

    text-decoration: none;

    border-bottom: 1px solid #7d7d7d;

    }a:hover {

    text-decoration: none;

    border-bottom: 1px solid #7d7d7d00;

    }about {

    background: #f9f9f9;

    display: block;

    padding: 20px;

    transform: translate(-50%,-50%);

    top: 50%;

    left: 50%;

    width: 600px;

    height: 450px;

    position: absolute;

    opacity: 0.8;

    }about2 {

    background: #f9f9f9;

    display: block;

    padding: 20px;

    transform: translate(-50%,-50%);

    top: 50%;

    left: 50%;

    width: 600px;

    height: 23px;

    position: absolute;

    opacity: 0.8;

    text-align: center;

    }h2 {

    font-family: 'Jura Light', sans-serif;

    text-shadow: 4px 4px 4px #aaa;

    text-align: center;

    color: #828282;

    text-transform: uppercase;

    border-bottom: 1px solid #d3d3d3;

    padding-bottom: 10px;

    }


    Тестовый файл test.php

  8. После авторизации вы попадете на эту страницу

    <? include(__DIR__.'/config.php');

    if($_SESSION[$name_login])

    {

    $info = '<h2>Здравствуйте '.back($_SESSION[$name_login]).'</h2>

    Эта страница - пример!<br>

    Если вы видите это текст, значит у вас активирована сессия $_SESSION['.$name_login.'] <br>

    Список существующих данных<br>

    имя <fio>$name_login</fio> = <red>'.$name_login.'</red> - файл config.php<br>

    сессия <fio>$_SESSION['.$name_login.']</fio> = <red>'.$_SESSION[$name_login].'</red><br>

    Данные в сесии зашифрованы файлом <fio>translit_1_4.php</fio><br>

    Расшифровка - <fio>back($_SESSION['.$name_login.'])</fio> = <red>'.back($_SESSION[$name_login]).'</red><br>

    куки <fio>$_COOKIE['.$name_login.']</fio> = <red>'.$_COOKIE[$name_login].'</red><br>

    Файл данных перменная <fio>$lp</fio> - файл config.php<br>

    Сейчас в нём записано = <red>'. str_replace('::', "::\n<br>", $lp) .'</red>

    ';

    }

    else

    {

    echo '<html> <head><link rel="stylesheet" type="text/css" href="'.$domen . $dirname.'/style.css"> <meta http-equiv="Refresh" content="2; URL='.$index .'"> </head> <body><about2>У вас недостаточно прав для просмотра данной информации!</about2></body> </html>';

    exit;

    }

    ?>

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>тестовая страница</title>

    <link rel="stylesheet" type="text/css" href="<? echo $domen . $dirname;?>/style.css">

    </head>

    <body>

    <about>

    <login><? if($_SESSION[$name_login]){?>

    <a href="<? echo $logout; ?>" target="_blank">Выйти</a> <?}else{?>

    <a href="<? echo $index; ?>" target="_blank">Войти</a><?}?>

    </login>

    <? echo $info; ?>

    <br>

    </about>

    </body>

    </html>


    Файл стилей translit_1_4.php

  9. Чтобы файлы не лежали в открытом виде мы их немного зашифровали - еще о шифровании

    <?

    $letters = array_unique(array('Ɇ','Ø','%','æ','ā','ɡ','ɸ','Ý','Þ','ʥ','ɤ','﬩','ɶ','Ȼ','ȵ','Ϣ','Ϡ','ŀ','ō','ä',

    'ƺ','Ħ','fi','╦','®','ǽ','≡','ȡ','Ȿ','ȣ','ɮ','ⱥ','ʁ','ʄ','ʆ','ʇ','ウ','¢','œ','ư','ƶ', 'ᖠ','ᖡ','ᖢ','ᖣ','ᚕ','ᚖ','ᚗ','ᚘ','ᚙ','ᚚ','᚛','᚜','ᴀ','ᴁ','ᴂ','ᴃ','ᴄ','ᴅ','ᴆ','ᴇ','ᴈ','ᴉ','ᴊ','ᴋ','ᴌ','ᴍ','ᴎ','ᴏ','ᴐ','ᴑ','ᴒ','ᴓ','ᴔ','ᴕ','ᴖ','ᴗ','ᴘ','ᴙ','ᴚ','ᴛ','ᴜ','ᴝ','ᴞ','ᴟ','ᴠ','ᴡ','ᴢ','ᴣ','ᴤ','ᴥ','ᴦ','ᴧ','ᴨ','ᴩ','ᴪ','ᴫ','ᴬ','ᴭ','ᴮ','ᴯ','ᴰ','ᴱ','ᴲ','ᴳ','ᴴ','ᴵ','ᴶ','ᴷ','ᴸ','ᴹ','ᴺ','ᴻ','ᴼ','ᴽ','ᴾ','ᴿ','ᵀ','ᵁ','ᵂ','ᵃ','ᵄ','ᵅ','ᵆ','ᵇ','ᵈ','ᵉ','ᵊ','ᵋ','ᵌ','ᵍ','ᵎ','ᵏ','ᵐ','ᵑ','ᵒ','ᵓ','ᵔ','ᵕ','ᵖ','ᵗ','ᵘ','ᵙ','ᵚ','ᵛ','ᵜ','ᵝ','ᵞ','ᵟ','ᵠ','ᵡ','ᵢ','ᵣ','ᵤ','ᵥ','ᵦ','ᵧ','ᵨ','ᵩ','ᵪ','ᵫ','ᵬ','ᵭ','ᵮ','ᵯ','ᵰ','ᵱ','ᵲ','ᵳ','ᵴ','ᵵ','ᵶ','ᵷ','ᵸ','ᵹ','ᵺ','ᵻ','ᵼ','ᵽ','ᵾ','ᵿ','ᶀ','ᶁ','ᶂ','ᶃ','ᶄ','ᶅ','ᶆ','ᶇ','ᶈ','ᶉ','ᶊ','ᶋ','ᶌ','ᶍ','ᶎ','ᶏ','ᶐ','ᶑ','ᶒ','ᶓ','ᶔ','ᶕ','ᶖ','ᶗ','ᶘ','ᶙ','ᶚ','ᶛ','ᶜ','ᶝ','ᶞ','ᶟ','ᶠ','ᶡ','ᶢ','ᶣ','ᶤ','ᶥ','ᶦ','ᶧ','ᶨ','ᶩ','ᶪ','ᶫ','ᶬ','ᶭ','ᶮ','ᶯ','ᶰ','ᶱ','ᶲ','ᶳ','ᶴ','ᶵ','ᶶ','ᶷ','ᶸ','ᶹ','ᶺ','ᶻ','ᶼ','ᶽ','ᶾ','ᶿ','ῲ','ῳ','ῴ','ῶ','ῷ','Ὸ','Ό','Ὼ','Ώ','ῼ'));

    $all_letter = array_unique(array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','@','_','-','.','<','>','/',',','а','о','у','ы','э','я','е','ё','ю','и','б','в','г','д','й','ж','з','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ь','ъ','А','О','У','Ы','Э','Я','Е','Ё','Ю','И','Б','В','Г','Д','Й','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ъ'));

    $count_letters = count($letters);

    $count_all_letter = count($all_letter);

    if($count_letters == $count_all_letter)

    {

    $new_massiv = array_combine($all_letter, $letters);

    }

    else

    {

    if($count_letters > count($all_letter))

    {

    $letters = array_splice($letters, $count_letters - $count_all_letter);

    }

    else

    {

    $all_letter = array_splice($all_letter, $count_all_letter - $count_letters);

    }

    }

    function ahead($str)

    {

    global $letters; global $all_letter;

    $tr = array_combine($all_letter, $letters);

    return strtr($str,$tr);

    }

    function back($str)

    { global $letters; global $all_letter;

    $tr = array_combine($letters, $all_letter);

    return strtr($str,$tr);

    }

    ?>


Вас может еще заинтересовать список тем : #PHP | #ADMINKA | #ALL_SERVISES | #PHP_BOOK |
Последняя дата редактирования : 2020-06-21 11:38
Название скрипта :DW Admin v1.1.
Скрипт № 9.1
Пример
Ссылка на скачивение: Все скрипты на одной странице
https://dwweb.ru/comments_1_5/include/img/hand_no_foto.png
no
no
Еще никто не прокомментировал! COMMENTS+   BBcode
аватар
🞨
Загрузить свой аватар
(max ширина, высота = 200px)

Подписаться + =
Теги:

Последние комментарии :
Паула :
10/07/2020 06:23
Коментариев
подробнее.
Марат :
12/06/2020 10:07
Всегда пожалуйста! Приходите еще!!!
подробнее.
Александр :
04/06/2020 01:42
Спасибо
подробнее.
admin :
20/05/2020 10:36
Как бы смешно это не звучало! Но! Запускается новая система комментирования COMMENTS+ 1.5. в тестовом режиме!От…
подробнее.
Паула :
21/05/2020 04:48
Вообще мне очень нравится, что вы делаете! И ваш подход! И ваш стиль!И не обращайте внимание на всяких…
подробнее.

НАШИ ПРОЕКТЫ : Проекты находятся в разной степени готовности (просто их столько, что времени не хватает…) Все статьи авторские, при копироавании активная ссылка обязательна DwWeb.ru! © 2015 - 2020 Мы на лучшем хостинге -> ruweb