Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » ASP, Perl, PHP и MySQL

страница доступа по паролю

Обсуждение темы страница доступа по паролю в разделе ASP, Perl, PHP и MySQL, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; При написании страницы для разрешения доступа к меню админа галлереии возникла вот такая проблема --- после того как введен пароль страничка должна дать ...


Закрытая тема
 
Опции темы
Старый 27.01.2006, 22:42   #1
При написании страницы для разрешения доступа к меню админа галлереии возникла вот такая проблема --- после того как введен пароль страничка должна дать доступ к меню настроек, но вместо этого снова спрашивается пароль и только после того как он снова введен и отправлен получаешь доступ к меню, т.е. пароль почему-то спрашивается дважды. Листинг странички такой:


if (!isset($_COOKIE["bunya"])):
/*IsSet($bunya) === false*/
if (isset($_POST['passd'])):
if ($_POST['pass'] == 'bubu')
{
setcookie("bunya","allow", 0, "/", $HTTP_HOST, 0) or die("cannot set cookie");

/*действия если пароль подошел*/
}
else{
/*если пароль не подошел*/
}
else:
/* вывод формы для ввода пароля*/
endif;
else:
if (isset($mode)):/*mode скрытое поле в форме меню админа*/
/*выполняем действия выбранные пользователем в меню админа*/
else:
/*вывод меню админа*/
endif;
endif;
 
Старый 27.01.2006, 22:42
Ссылки
Старый 27.01.2006, 23:27   #2
В самом верху сделай ещё один иф, который проверяет,, правилен ли куки, и если он правельный то пишешь свой админ меню, если он не правильный то форму для пароля.

А там где ты проверяешь переменную POST если она верна то запиши информацию в куки и сделай переход н эту же страницу header("Location: adm.php");

P.S если что-то не понятно, спроси у меня, я обитаю тут forum.mweb.ru

Jeid добавил [date]1138394045[/date]:
твоя пробелма состоит в том, что ты нажимаешь на кнопку формы, но сначалы ты проверяешь куки(который пуст) а уж тока потом его записываешь, поэтому требуется вводить пароль два раза, хотя второй раз вовсе не обязательно еговводить правильно и так откроется, если проверок больше нигде не будет
 
Старый 28.01.2006, 13:39   #3
Вот скрипт, который я, написав однажды, теперь использую всегда, когда речь идёт именно о панели админа:

PHP код:
<?php


function auth(){
    
header("WWW-Authenticate: Basic realm=\"Введите имя и пароль:\"");
    
header("HTTP/1.0 401 Unauthorized");
    print 
"Вам необходимо ввести имя и пароль для доступа к этой странице!\n";
    exit;
}

session_start();

if(((!isset(
$_SERVER['PHP_AUTH_USER']))&&(!isset($HTTP_SESSION_VARS['gg_fuCnameKEY095rr'])))||((isset($HTTP_SESSION_VARS['logout']))&&($HTTP_SESSION_VARS['logout']=="1"))){
    
$HTTP_SESSION_VARS['logout']="0";
    
auth();
}else{
    
$file=fopen("accounts.txt""r");
    
$data=file("accounts.txt");
    
fclose($file);
    
$l=count($data);
    
$logon=0;
    for(
$i=0;$i<$l;$i++){
        if(
$logon!="1"){
            
$parts=explode("\t",$data[$i]);
            if(((
trim($parts[0])==$_SERVER['PHP_AUTH_USER'])&&(trim($parts[1])==$_SERVER['PHP_AUTH_PW']))){
                
$logon="1";
                                 
session_register('gg_fuckingKEY095rr','ht_fingKEnameTRRErr');
                
$gg_fuCnameKEY095rr $_SERVER['PHP_AUTH_USER'];
                
$ht_fingKEpassTRRErr $_SERVER['PHP_AUTH_PW'];
            }elseif((isset(
$HTTP_SESSION_VARS['gg_fuCnameKEY095rr']))&&(isset($HTTP_SESSION_VARS['ht_fingKEpassTRRErr']))&&(trim($parts[0])==$HTTP_SESSION_VARS['gg_fuCnameKEY095rr'])&&(trim($parts[1])==$HTTP_SESSION_VARS['ht_fingKEpassTRRErr'])){
                                 
$logon="1";
            }
        }
    }
}

if(
$logon!="1"){
    
auth();
}else{

             
// вот тут продолжаем программу, если авторизации пройдена

}

?>
Этот скрипт нужно вставить в начало каждой страницы, доступ к каторой должен быть защищён.

При этом, на одном уровне с файлами с этим скриптом должен находиться файл accounts.txt с текстом вида:

логин1\tпароль1\n
логин2\tпароль2\n
логин3\tпароль3

(т.е. через табуляцию)

Чтобы выйти из админки и залогиниться заново, есть файл logout.php:

PHP код:
<?php

session_start
();
unset(
$HTTP_SESSION_VARS['gg_fuCnameKEY095rr'],$HTTP_SESSION_VARS['ht_fingKEpassTRRErr']);
if((isset(
$HTTP_SESSION_VARS['logout']))&&($HTTP_SESSION_VARS['logout']==0)){
    
$HTTP_SESSION_VARS['logout']=1;
         print 
"<html><head><title>logout</title>\n
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">\n
    <link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">\n
    </head><body>\n"
;
    print 
"<font class=\"just_text\">Вы вышли!
</font>
    <a href=\"index.php\" class=\"all_links\">(Войти снова)</a>"
;
    print 
"</body></html>";
}

?>
 
Старый 29.01.2006, 13:05   #4
скрипт класс!!!!!

я чайеик и хотел спросить как записывать логин 'baho' и парол '123'
baho\t123\n
чавото не работает вход.
Если не правельно плж исправте
СПАСИБО!!!
 
Старый 29.01.2006, 13:51   #5
Сека. Покорнейше благодарю за скрипт!
Обычно я использую авторизацию через штмл-форму, но теперь видимо в некоторых варинтах придётся изменить структуру входа.
Сохранил!

Вижу только один недостаток, это- текстовый файл как хранилище паролей.

sl_play добавил [date]1138533734[/date]:
Странно! В пределах локалхоста всё прекрасно работало, загрузил на сервер присобачив к однойстранице парольный вход. Скопировал файл и с парлдем и логином, выставил права. Вообщем вроде всё правильно сделал. Но работать скрип перестал.
Пишу логин и пароль , что в файле - опять выскакивает окно для ввода логина и пароля.
Хост на линуксе, может дело в хосте и апаче который у них. Вообщем сам понять ничерта не могу.
 
Старый 29.01.2006, 20:40   #6
baho, \t - это значит табуляция. Т.е. надо между логином и пароле кнопку TAB нажать.

sl_play, смотри:

$file=fopen("accounts.txt", "r");
$data=file("accounts.txt");
fclose($file);

тут читается файл.

А вот тут:

$parts=explode("\t",$data[$i]);

каждая строка поочереди разбивается на кусочки через табуляцию. Т.о., если файл с паролями такой:

login pass
login2 pass2

то будет две итерации цикла. На первой в переменную $parts[0] занесётся "login", а в $parts[1] занесётся "pass". На второй соответственно "login2" и "pass2".

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

Вот, как я делал с БД:

PHP код:
<?php

include("sql.php"); // тут задаются параметры доступа в БД, которые используются в следующей строке
$link=mysql_connect($sql_host$sql_user$sql_password);

define("login","login");
define("password","password");

$query="SELECT * FROM `admin`";
$result=mysql_db_query($dbname,$query,$link);
if(!(
$str=mysql_fetch_array($result))){
    print 
"Data Base error!";
    exit;
}

$adm_login=$str[login];
$adm_pass=$str[password];


include(
"verification.php");
if(!
$authorized){
    exit;
}else{
     
// программа
}

mysql_close($link); 
?>
файл verification.php:

PHP код:
<?php

$authorized
=false;

function 
auth(){
    
header("WWW-Authenticate: Basic realm=\"Введите имя и пароль:\"");
    
header("HTTP/1.0 401 Unauthorized");
    print 
"Вам необходимо ввести имя и пароль для доступа к этой странице!\n";
    exit;
}

session_start();

if(((!isset(
$_SERVER['PHP_AUTH_USER']))&&(!isset($HTTP_SESSION_VARS['gg_fuCnameKEY095rr'])))||((isset($HTTP_SESSION_VARS['logout']))&&($HTTP_SESSION_VARS['logout']=="1"))){
    
$HTTP_SESSION_VARS['logout']="0";
    
auth();
}else{
    
$logon=0;

    if(
$logon!="1"){
        if(((
trim($adm_login)==$_SERVER['PHP_AUTH_USER'])&&(trim($adm_pass)==$_SERVER['PHP_AUTH_PW']))){
            
$logon="1";
            
session_register('gg_fuckingKEY095rr','ht_fingKEnameTRRErr');
            
$gg_fuCnameKEY095rr $_SERVER['PHP_AUTH_USER'];
            
$ht_fingKEpassTRRErr $_SERVER['PHP_AUTH_PW'];
        }elseif((isset(
$HTTP_SESSION_VARS['gg_fuCnameKEY095rr']))&&(isset($HTTP_SESSION_VARS['ht_fingKEpassTRRErr']))&&($adm_login==$HTTP_SESSION_VARS['gg_fuCnameKEY095rr'])&&(trim($adm_pass)==$HTTP_SESSION_VARS['ht_fingKEpassTRRErr'])){
            
$logon="1";
        }
    }
}

if(
$logon!="1"){
    
auth();
}else{
    
$authorized=true;
}
?>



Апач тут, скорее всего, не при чём. Проверь путь к файлу. Это раз.

Возможно, на сервере проблема с настройкой сессий. Ведь суть скрипта в том, что он первый раз выкидывает окно для пароля, а потом запоминает логин и пароль в сессии. И в следующий раз смотрит: если в сессии пароль есть и он правильный, то запрос снова выдавать не надо.
 
Старый 29.01.2006, 20:49   #7
sl_play,
Цитата:
Сильвер. Покорнейше благодарю за скрипт!
Это не Сильвер Это Сека
 
Старый 29.01.2006, 20:50   #8
baho, а \n соответствует кноке Enter.
 
Старый 29.01.2006, 21:05   #9
seka, ОГРОМНЫЙ РЕСПЕКТ за разьяснение. Все работает!!!! и радует глаз!!!
СПАСИБО!!!!
 
Старый 29.01.2006, 22:01   #10
seka, блин, прости, и вправду перепутал тебя с сильвером.
Скажу сразу, что я в скрипте сменил
$gg_fuCnameKEY095rr = $_SERVER['PHP_AUTH_USER'];
$ht_fingKEpassTRRErr = $_SERVER['PHP_AUTH_PW'];
на
$_SESSION['gg_fuCnameKEY095rr'] = $_SERVER['PHP_AUTH_USER'];
$_SESSION['ht_fingKEpassTRRErr'] = $_SERVER['PHP_AUTH_PW'];
думаю это не повлияло на работу скрипта.

P.S. понял почему тебя спутал с сильверов, всё дело в твоём логотипе(аватаре).
 
Старый 29.01.2006, 22:01
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нет доступа к phpMyAdmin Ola123 ASP, Perl, PHP и MySQL 6 17.10.2008 10:57
Права доступа Chmod ??? anton ASP, Perl, PHP и MySQL 2 02.08.2007 19:22
Ввод в MySql по логину и паролю GentleVampire HTML, CSS, JavaScript 2 06.02.2005 18:47
Права доступа к Upload candy_man HTML, CSS, JavaScript 2 29.03.2004 09:48
Права доступа на php curious HTML, CSS, JavaScript 7 22.02.2004 23:08


Текущее время: 08:32. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум