Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Система авторизации
 
 автор: bartik   (06.07.2006 в 02:12)   письмо автору
 
 

Здраствуйте! Я читатель ваших книжек , и очень хотел бы чтобы вы помогли , надо сделать чтобы при логине bart и пароле bart заходил в аккуант и ему были доступны ссылки типа оплаты итд , + чтобы можно было выходить. Я тут набросал кое-что , но почему-то ?pay работает даже когда я и не зашёл в аккуант, я думаю надо наложить глобальную проверку на существование куков имени и пароля , толька как это сделать.... я пробывал через empty , но кажется не так , прошу описать в чём я ошибся . Спасибо большое.

<? 
if(empty($name)){ 
echo
"<form action=?auth method=post> 
Имя посетителя : <input type=text name=name><br> 
Пароль : <input type=password name=password><br> 
<input type=submit value=Отправить> 
</form>"
;
}
$a "bart";
$b "bart";
if (
$_POST['password'] == $b && $_POST['name'] == $a) {

if(isset(
$_GET['auth'])){


setcookie("name",$name,time()+3600);
echo<<<HTML
Добро пожаловать $name<br>
<a href=/>Заказать домен</a>
<a href=?pay>Пополнить баланс</a>
<a href=?logout>Выйти </a>
HTML;
  
}

if(isset(
$_GET['pay'])){
echo<<<HTML
<form action="./" method="post"><input type="hidden" name="p" value="addamount">
        Пополнить счет на <input type="text" value="" name="add" size="4"> $ <input type="submit" value="Добавить средства">
        </form>
HTML;
}
if(isset(
$_GET['logout'])){
 
setcookie("name",$name,time()-999999);
echo 
"<meta http-equiv='Refresh' content='0; URL=auth.php'>";
}

}
exit;
?> 

Пожалуйста помогите мне , над кодом прошу не смеятся, я начинающий.

   
 
 автор: hell_riser   (06.07.2006 в 07:51)   письмо автору
 
   для: bartik   (06.07.2006 в 02:12)
 

Можно создать файл типа acces.php в котором будут проверятся значения куков
acces.php

<?php
$name 
"bart";
$pass "bart";
if(
$_COOKIE['name'] != $name OR $_COOKIE['pass'] != $pass);
echo 
"Вы не авторизованы, авторизуйтесь пожалуйста.";
// А убивать куки можно ещё и так:
if(isset($_GET['logout']))
{
  
setcookie("name");
  
setcookie("pass");
}
?>

И подключать этот файл к страницам к торым разрешён доступ только авторизованым пользователям.

   
 
 автор: cheops   (06.07.2006 в 12:21)   письмо автору
 
   для: bartik   (06.07.2006 в 02:12)
 

Странно, а у вас точно этот код работает?

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=18760

   
 
 автор: bartik   (06.07.2006 в 13:20)   письмо автору
 
   для: cheops   (06.07.2006 в 12:21)
 

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


<?

echo<<<HTML // А это вылезало когда у пользователя нету куков !!!

<form action=enter.php?auth method=post
Логин <input class=input name=name value=""
Пароль <input class=input name=pass value=""
<
input type=hidden name=enter value=yes
<
input class=button type=submit value="Вход"
</
form>
HTML;

if(isset(
$_GET['auth'])){
setcookie("name",$name,time()+3600);
setcookie("pass",$pass,time()+3600);
}


echo 
"Добро пожаловать $name <br> //Эти ссылки должнен видеть толька авторизированный аккуант.

<a href=?logout>Выйти</a>"
;



if(isset(
$_GET['logout'])){

 
setcookie("name",$name,time()-999999);
 
setcookie("pass",$pass,time()-999999);
echo 
"<meta http-equiv='Refresh' content='0; URL=enter.php'>";
}
?>

   
 
 автор: hell_riser   (06.07.2006 в 13:32)   письмо автору
 
   для: bartik   (06.07.2006 в 13:20)
 

Проверка к тому и сводится, что если куков нет, то просим авторизоватся.
А если есть, то сверяем их с правильными логином и паролем, если не совпадают, то опять просим авторизоваться.
К стати для начала былобы не плохо проверить разрешены ли у пользователя куки

   
 
 автор: valenok   (06.07.2006 в 14:42)   письмо автору
 
   для: bartik   (06.07.2006 в 13:20)
 

А что это значит:

echo<<<HTML


Так вообще можно писать или это << вместо кавычек?
И почему вы не закрываете тег html ?

   
 
 автор: Trianon   (06.07.2006 в 14:44)   письмо автору
 
   для: valenok   (06.07.2006 в 14:42)
 

это строковая константа в стиле heredoc.
http://www.php.net/manual/ru/language.types.string.php#language.types.string.syntax.heredoc
HTML - не тег, а ограничитель.

   
 
 автор: cheops   (06.07.2006 в 21:21)   письмо автору
 
   для: bartik   (06.07.2006 в 13:20)
 

Имеется ввиду такое поведение?
<?php
  
if(isset($_GET['logout']))
  { 
    
setcookie("name",$name,time()-999999); 
    
setcookie("pass",$pass,time()-999999); 
    echo 
"<meta http-equiv='Refresh' content='0; URL=enter.php'>"
    exit();
  } 

  if(!empty(
$_POST))
  { 
    
setcookie("name",$_POST['name'],time()+3600); 
    
setcookie("pass",$_POST['pass'],time()+3600); 
    
header("Location: $_SERVER[PHP_SELF]");
  } 

  if(
$_COOKIE['name'] != "bart" || $_COOKIE['pass'] != "bart")
  {
  
?>
    <form method=post> 
    Логин <input class=input name=name value=""> 
    Пароль <input class=input name=pass value=""> 
    <input type=hidden name=enter value=yes> 
    <input class=button type=submit value="Вход"> 
    </form> 
  <?php
  
}
  else
  {
    echo 
"Добро пожаловать $name <br> 
          <a href=?logout>Выйти</a>"

  }
?>

   
 
 автор: valenok   (06.07.2006 в 12:35)   письмо автору
 
   для: bartik   (06.07.2006 в 02:12)
 


<?
if(!isset($_COOKIE['name']) OR empty($_COOKIE['name']))   {
// Проверяем авторизован ли уже пользователь. Если нет - пусть пройдёт авторизацию

if(!isset($_POST['password']) OR !isset($_POST['name'])){ // ПРоверяем ввёл ли пользователь свои данные
//Если нет - выводим форму для ввода    
?>
<form method='post'> 
Имя посетителя : <input type='text' name='name'><br> 
Пароль : <input type='password' name='password'><br> 
<input type='submit' value='Отправить'> 
</form>
<?php
    
die();    }// И заканчиваем выполнение скрипта. (Всё равно он не авторизован)

$pass=$_POST['password']; $user=$_POST['name'];
if(empty(
$pass) || empty($user)){die('Заполните поля..');}
// Проверяем не нажал ли пользователь просто так на кнопку сабмит

$allowed_user "bart"
$allower_pass "bart"
// Определяем верные значения

if ($pass != $allower_pass || $user != $allowed_user
    { die(
'Неверно указанна пара логин-пароль.');}
// Проверяем сходится ли верное значение с введённым..

setcookie("name",$user,time()+3600); // Если всё правильно, выдаём куку и перезагружаем страницу
echo "<meta http-equiv='Refresh' content='0; URL=".$_SERVER['PHP_SELF']."'>";
}
else{
$user=$_COOKIE['name'];} // Это если порльзователь был авторизован - присваиваем переменной его имя

if(isset($_GET['logout'])){  // Если пользователь пожелал выйти..
setcookie("name",$user,time()-999999); 
echo 
"<meta http-equiv='Refresh' content='0; URL=".$_SERVER['PHP_SELF']."'>";


// Выводим пользователю меню
echo "<HTML><body> 
Добро пожаловать "
.$user."<br> 
<a href=?order>Заказать домен</a> 
<a href=?pay>Пополнить баланс</a> 
<a href=?logout>Выйти </a> 
<HTML>"
;   


// Если он решил пополнить баланс - предоставим ему такую возможность..
if(isset($_GET['pay'])){ ?>
<HTML>
<form method="post">
<input type="hidden" name="p" value="addamount"> 
Пополнить счет на <input type="text" name="add" size="4"> $ 
<input type="submit" value="Добавить средства"> 
</form> 
<HTML>
<?php die();}

   
 
 автор: bartik   (06.07.2006 в 15:37)   письмо автору
 
   для: valenok   (06.07.2006 в 12:35)
 

Сделал следущим образом

<?

if(!isset($_COOKIE['name']) OR empty($_COOKIE['name']))   { 
if(!isset(
$_POST['pass']) OR !isset($_POST['name'])){  
echo 
"<table align=center><form  method='post'> 
Имя : <input type='text' name='name'> 
Пароль : <input type='password' name='pass'> 
<input type='submit' value='Войти'> 
</form></table>"
;
exit;
}}

include 
"conf.php";
if(
$name =="" or $pass==""){echo "Заполните все поля!"; exit;}

$query=mysql_query("select * from users where user_name='$_POST[name]' and user_pass='$_POST[pass]';");
 if(
$query_array=mysql_fetch_array($query)){

setcookie("name",$name,time()+3600); 
setcookie("pass",$pass,time()+3600); 
echo
"<HTML><body> 
<table align=center>Добро пожаловать <b>"
.$name." Пароль ".$pass."</b><br> 
<a href=?order>Заказать домен</a> 
<a href=?pay>Пополнить баланс</a> 
<a href=?edit>Изменить данные</a> 
<a href=?logout>Выйти </a><br></table> 
<HTML>"
;
 }

if(isset(
$_GET['pay'])){
echo<<<HTML
<table align="center" cellpadding="10">
    <tr>
        <td align=>
        Общая сумма на балансе: <b>0$</b><br>
        Остаток на счету: <b>0$</b><br>
        <form action="enter.php" method="GET"><input type="hidden" name="p" value="addamount">
        Пополнить счет на <input type="text" value="" name="add" size="4"> $ <input type="submit" value="Добавить средства">
        </form>
        </td>
    </tr>
</table>
HTML;
}
if(isset(
$_GET['order'])){
echo<<<HTML
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$name
HTML;
}


if(isset(
$_GET['logout'])){  
setcookie("name",$user,time()-999999); 
setcookie("pass",$pass,time()-999999); 
echo 
"<meta http-equiv='Refresh' content='0; URL=".$_SERVER['PHP_SELF']."'>"

?>

Вот сделал с mysql , но у меня одна загвоздка , если вводить с главной логин и пароль и ввести не те данные то не пустит , а если вводить скажем с enter.php?pay то при вводе любых данных пускает , это не правильно!!! А вот где ошибка подскажите пожалуйста.

   
 
 автор: hell_riser   (06.07.2006 в 19:54)   письмо автору
 
   для: bartik   (06.07.2006 в 15:37)
 

Если вы перед этим авторизовались и не убили куки, то это нормально
А вообще-то лучше вынести авторизацию в отдельный файл и при не удачной проверке куков делать на него переадресацию.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования