1

Всем привет.
На хостинге крутится сайт, к которому хочу приделать что-то похожее на админку, а то уже порядком поднадоело руками в mysql ковыряться. Собственно стал в вопрос с алгоритмом аутентификации, в гугле нарыл несколько вариантов, но вот насколько они актуальны не знаю. Подскажите пожалуйста что лучше сделать в этом направлении ?

2 (19.10.2012 21:38:05 отредактировано buy-happiness)

"Сайт" на PHP?

Первое что в глаза попалось, оба варианта вполне актуальны:
Система авторизации HTTP-Basic
Система авторизации на PHP

UPD
Авторизация на php (тоже неплохой вариант)

3

buy-happiness пишет:

"Сайт" на PHP?

Первое что в глаза попалось, оба варианта вполне актуальны:
Система авторизации HTTP-Basic
Система авторизации на PHP

UPD
Авторизация на php (тоже неплохой вариант)

да. Сделаю пока так:
При вводе логина и пароля  создается хэш сумма логин+пароль+(какая нить строка)
если соотношение логин/хэш правильное
в кукиесы ложится произвольный идентификатор, а на стороне сервера записывается этот идентификатор и время до которого он действиетелен
при каждом запросе на закрытую страницу будут сравниваться идентификаторы.
Думаю так пойдет.

4

или лучше использовать  идентификатор сеанса (SID), а не кукиесы ?

5

Тоже интересно, можно ли обойтись без кукисов?

Да, у меня Ubuntu.
Нет, не глючит.

6 (20.10.2012 10:58:00 отредактировано marikk)

-=Serj=- пишет:

Тоже интересно, можно ли обойтись без кукисов?

Не совсем без кукиесов. На скок я понял "механиз отслеживания сессий" по возможности использует куки, а если они не поддерживаются, то всем компьютерам с таким внешним Ip будет присвоен единый идентификатор(и доступны одинаковые данные). Думаю на куках все-же будет лучше

7

Если вы промышляете процедурным программированием (не ООП), то тут все просто очень:
1) Юзер имеет $_SESSION['id']? Если нет, то может он имеет $_COOKIE['id']? Если да, то переносим ID из куки в сессию, если нет, то отказываем в доступе.
2) При залогивании проверяем является ли md5 (пароль+соль) введенный = md5 (пароль+соль) из БД (выборка по username/email и пр.). Если все ок - добавляем в $_SESSION['id'] айдишник юзера + если стояла галочка "Запомнить меня", то еще и куки добавляем (для чего - см. п.1).
3) При регистрации или добавлении пользователя делаем sha512 либо md5 из логина, и любых рандомных данных (время, дата и пр) соль и опять же шифруем ее с паролем.

marikk пишет:

или лучше использовать  идентификатор сеанса (SID), а не кукиесы ?

На самом деле зависит от задачи, в своё время использовал сессии.

9

Временно сделал так:

В форме авторизации проверяет установлены  ли куки ? Если да то перебрасывает на рабочую страницу. Если нет дает ввести логин/пароль

<?php
  if (!is_null($_COOKIE['id'])){
  echo "Вы авторизованы сейчас вас перебросит на нужную страницу";?>
  <script language = 'javascript'>
    var delay = 5000;
    setTimeout("document.location.href='http://test/adminka/t'", delay);
  </script>

далее обычная html форма
<?php  }

После нажатия кнопки "войти" запускается скрипт, который проверяет  MD5(логин+пароль+мусор) на наличие в базе. Если все хорошо клиенту в куки шлю ID и в базу записывается его ID и время до которого он действителен.

  
    if(isset($_POST['name'])){
    include 't/connect.php';
    $log=$_POST['name'];
    $q=mysql_query("SELECT pas FROM auth WHERE login='$log'") or die ("нетуда");
    $f=mysql_fetch_row($q);
    if (MD5($_POST['name'].$_POST['passwod']."xb[ef[ef")==$f[0]){
      $tmp=MD5(rand(1,10).rand(10,25).date()."ytgjyznrf!");
      $da=time()+3600;
      $lg=$_POST['name'];
      if (mysql_query("UPDATE auth SET id='$tmp', limitD='$da' WHERE login='$lg'")){
    if (SetCookie("id","$tmp",time()+3600))
        header("Location: http://test/adminka/t");
    else
       exit("невозможно установить кукиесы");
     }
     else
      exit ("нетуда брынь $mysql_error()");
    }
    else{
       echo "неправильно введен пароль";
        header("Location: http://test/adminka");
    }
  }
 else 
    exit ("за вами выехала милиция");

На запароленых страницах проверяется ID пользователя и время до которого он действителен, если он не действителен удаляем.

    if(isset($_COOKIE['id'])){
      include 'connect.php';
      $q=mysql_query("SELECT id, limitD FROM auth");
      $f=mysql_fetch_row($q);
      if ($_COOKIE['vmovsid'] == $f[0] && time() < $f[1]){
      $a=rand(1,2); // ниче не делаем
      }
      else {
    setcookie('id','',time()-3600);
    exit ("попробуйте авторизоваться заново");
      }
    }
    else
      exit("вы не прошли <a href='/adminka'>авторизацию</a> на сайте");


Единственная проблема это удаление кукиесов. Подскажите пожалуйста как это сделать ? Куки устанавливаются в локации  /adminka   а удалить пытаюсь из /adminka/t