Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2014, 15:31   #1
MedwedoS
Пользователь
 
Аватар для MedwedoS
 
Регистрация: 24.02.2014
Сообщений: 72
Восклицание Авторизация (проверка)

Написал авторизацию для сайта, прошу проверить и подсказать если что не так, или как сделать лучше.

Описание: Есть сайт (15 страниц). Сайт носит функцию панели настроек для другого сайта.
На сайте будут 10 уч. записей (т.е. доступ к страницам должен быть только у 10 человек, логины и пароли я сам заношу в базу)
Сам сайт это html страница с меню, по центру которой имеется iframe в котором уже подгружаются php страницы.

Итог:
Меню html (титульной странцы)
Код HTML:
<script type="text/javascript">
function changeFrameNews()
{
document.getElementById("changedframe").src="/news/index.php?back=glav";
}
</script>
Я нажимаю на кнопку и во фрейм по этой ссылке загружается страница news.php

Теперь сама авторизация.
При заходе на сайт меня перекидывает на login.php (он загружен в iframe)
PHP код:
<?php
include "bdconnect.php";
session_start(); 

//Запускаем проверку сессии
if($_SESSION['atu'] == '1' && $_SESSION['alogin'] && $_SESSION['id']) {
echo 
'
    <table width="200" border="0" class="tabla">
    <tr><td>
    <form action="unloginf.php?back=autorlogin" method="POST">
    Логин: '
;
    echo 
$_SESSION['alogin'];
echo 
'
    <br>Ваш уровень доступа: '
;
    echo 
$_SESSION['alvl'];
echo 
'
    <br>
    <input type="submit" value="Выйти из аккаунта">
    </form>
    </td></tr>
    </table>'
;
    } else { 
    echo 
'
    <table width="200" border="0" class="tabla">
    <tr><td>
    <form action="loginf.php?back=autorlogin" method="POST">
    Логин: <br> <input type="text" name="alogin">
    <br>
    Пароль: <br> <input type="password" name="apassword">
    <br>
    <input type="submit" value="Залогиниться">
    </form>
    </td></tr>
    </table>
    '
;    
    }
?>
Если данных о удачной авторизации нету в сессии, он видит форму авторизации, введя логин и пароль его перебрасывает сюда (с гетом, что был передан со страницы формы авторизации):
PHP код:
<?php
    header
("Content-type: text/html; charset=utf-8");
    include 
"bdconnect.php";
    
//Запускаем сессию если пароль и логин имеются и передан ГЕТ со страницы форм авторизации
if ($_GET['back'] == 'autorlogin' && $_POST['alogin'] && $_POST['apassword']) { 
    
session_start(); 
    } else { 
    echo 
'Ошибка! Данные утеряны!<br>';
    echo 
'Ошибка! Доступ к этой странице ограничен!';
    die;
    };
//Если отсутствуют логин и айди, начинаем сборку
if($_SESSION['atu'] >= '0' || !isset($_SESSION['alogin']) || !isset($_SESSION['id'])) {
    
//Ищем введенный логин в базе
    
$query "SELECT `login` FROM `autoriz` WHERE `login` = '".$_POST['alogin']."'";
    
$result mysql_query($query);
    
$slogin mysql_fetch_array($result);
    
//Ищем введенный пароль в базе (если найден логин)
    
if ($slogin['login'] == $_POST['alogin']) {
    
$query "SELECT `passw` FROM `autoriz` WHERE `login` = '".$_POST['alogin']."'";
    
$result mysql_query($query);
    
$spassword mysql_fetch_array($result);
    
//Ищем уровень доступа по логину
    
$query "SELECT `level` FROM `autoriz` WHERE `login` = '".$_POST['alogin']."'";
    
$result mysql_query($query);
    
$slvl mysql_fetch_array($result);
    } else {
        echo 
'Ошибка! Такого логина не существует!';
        die;
    }
    } else {
        echo 
'вы уже авторизованы!';
    }
    
//Если пароль совпадает, записываем в сессию 1 и логин (на страницах по логину будет сравнение из БД)
    
if ($spassword['passw'] == md5($_POST['apassword'])) {
        
$_SESSION['atu'] = '1';
        
$_SESSION['alogin'] = $_POST['alogin'];
        
$_SESSION['id'] = mt_rand (5250);
        
$_SESSION['alvl'] = $slvl['level'];
        
//Переадресовываем на страницу авторизации и сообщаем о удачной авторизации
        
header("Location: http://мой-сайт/login.php");
    } else {
        echo 
'Пароль не верный!';
    }
?>
Когда юзер успешно авторизировался, его бросило обратно на Login.php там надпись о его профиле и кнопка выйти.

Теперь он может в меню опять нажать кнопку "Новости", фрейм загрузит страницу новостей в которой будет такая проверка авторизованности
PHP код:
//Проверка с какой страницы был переход
if ($_GET['back'] == 'glav') {
    
session_start();
    include 
"bdconnect.php";
    } else {
    echo 
'Доступ запрещен!';
    }
//Процедура проверки сессии
if($_SESSION['atu'] == '1' && $_SESSION['alogin'] && $_SESSION['id']) 
    {
    
//Ищем введенный логин в базе
    
$query "SELECT `login` FROM `autoriz` WHERE `login` = '".$_SESSION['alogin']."'";
    
$result mysql_query($query);
    
$slogin mysql_fetch_array($result);
        if (
$slogin['login'] == $_SESSION['alogin']) 
        {

            
//Тут контент

    
} else {
            echo 
'Доступ запрещен';
        }
    } else {
        
//Переадресовываем на страницу авторизации
        
header("Location: http://мой-сайт/login.php");
    } 
Вот такая идея и реализация. Прошу посмотреть и сказать что плохо, где ужасно и что сделать. Спасибо!
MedwedoS вне форума Ответить с цитированием
Старый 04.08.2014, 15:47   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

Смотрите повторяющиеся куски кода, а они у вас в избытке. Зачеи три раза запрос один и тот же делать? Сделапли один и смотрите теирезультаты какие нужны.
Кроме того если в сессии есть флаг успешной авторизации зачем еще раз делать запрос и проверять авторизацию.. А в целом приемлимо, если исклчить кучу лишнего...
И еще я лично асякие ифреймы не прриемлю... Если хочется без перезагрузки то аякс
ADSoft на форуме Ответить с цитированием
Старый 04.08.2014, 23:33   #3
MedwedoS
Пользователь
 
Аватар для MedwedoS
 
Регистрация: 24.02.2014
Сообщений: 72
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
Смотрите повторяющиеся куски кода, а они у вас в избытке. Зачеи три раза запрос один и тот же делать? Сделапли один и смотрите теирезультаты какие нужны.
Кроме того если в сессии есть флаг успешной авторизации зачем еще раз делать запрос и проверять авторизацию.. А в целом приемлимо, если исклчить кучу лишнего...
И еще я лично асякие ифреймы не прриемлю... Если хочется без перезагрузки то аякс
Запрос исправил.
Проверка авторизации с запросом на каждой странице исправил (удалил).
Так же исправления по мелочи.
Фрейм мне нравиться, аякс не хочу.

Есть еще предложения?

Авторизация, испр
PHP код:
<?php
    header
("Content-type: text/html; charset=utf-8");
    include 
"bdconnect.php";
    
//Запускаем сессию если пароль и логин имеются и передан ГЕТ со страницы форм авторизации
if ($_POST['back'] == 'autorlogin' && $_POST['alogin'] && $_POST['apassword']) { 
    
session_start(); 
    } else { 
    echo 
'Ошибка! Данные утеряны!<br>';
    echo 
'Ошибка! Доступ к этой странице ограничен!';
    die;
    };
//Если отсутствуют логин и айди, начинаем сборку
if($_SESSION['atu'] == '0' || !isset($_SESSION['alogin']) || !isset($_SESSION['id'])) {
    
//Ищем введенный логин в базе
    
$query "SELECT login,passw,level FROM `autoriz` WHERE `login` = '".$_POST['alogin']."'";
    
$result mysql_query($query);
    
$ary mysql_fetch_array($result);
    
//Ищем введенный пароль в базе (если найден логин)
    
if ($ary['login'] == $_POST['alogin']) {
    
//Если пароль совпадает, записываем в сессию 1 и логин (на страницах по логину будет сравнение из БД)
    
if ($ary['passw'] == md5($_POST['apassword'])) {
        if (
$_POST['alogin'] == 'medwedos') {$randa '4';} else {$randa mt_rand (5250);}
        
$_SESSION['atu'] = '1';
        
$_SESSION['alogin'] = $_POST['alogin'];
        
$_SESSION['id'] = $randa;
        
$_SESSION['alvl'] = $ary['level'];
        
//Переадресовываем на страницу авторизации и сообщаем о удачной авторизации
        
header("Location: http://мой-сайт/login.php");
    } else {
        echo 
'Пароль не верный!';
    }
    } else {
        echo 
'Ошибка! Такого логина не существует!';
        die;
    }
    } else {
        echo 
'вы уже авторизованы!';
    }
    
?>

Последний раз редактировалось MedwedoS; 04.08.2014 в 23:57.
MedwedoS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация в VK :D bakanaev Работа с сетью в Delphi 3 04.12.2012 11:16
авторизация cvetanet Microsoft Office Access 11 30.08.2011 18:10
excel.Проверка VBA и проверка функции Будда Помощь студентам 0 14.04.2011 21:10
Авторизация SergeyWR Фриланс 12 01.03.2011 08:50
Обычная авторизация или авторизация на уровне браузера? calugin Безопасность, Шифрование 0 13.01.2011 00:34