1 (16.06.2013 02:17:00 отредактировано webber)

Всем привет я начинаю учить PHP  авторизация работа c session & cookie.

Задача такая ограничить доступ в админку обычному пользователю форма авторизация общая при в авторизации админа должен быть доступ
к admin.php а при неавторизованных пользователях или обычных пользователях выбрасывало на главную (session & cookie шифровать)

Я написал что вроде такого

Пример форма Login отправляет логин и пароль (POST) на login.php

<?php

if($_POST['username'] != '' and $_POST['passwd'] != '')
{
    if($_POST['username'] == 'User1' and $_POST['passwd'] == 'Pass1')
    {
         session_start();
         setcookie('username', sha1($_POST['username']), time()+ 3600 * 24 * 7); // даем куки на 7 дней
         echo 'Hi '. $_POST['username'];
    }
}
?>

А вот пример настоящий который я пишу для сайта своего

    public function Login($login_in, $passwd_in, $remember){
        
        $this->LoginDB($login_in);
        $this->result->fetch();
            if($this->login == $login_in and $this->passwd == sha1($passwd_in))
            {
                session_start();
                if($this->groupname == 'admin')
                {
                    $_SESSION['login'] = sha1($this->login);
                    if($remember){
                        setcookie('login', sha1($this->login), time()+ 3600 * 24 * 7);
                    }
                    header("Location: /admin.php");
                }
                else
                {
                    $_SESSION['login'] = sha1($this->login);
                    if($remember){
                        setcookie('login', sha1($this->login), time()+ 3600 * 24 * 7);
                    }
                    header("Location: user.php");
                }
            }
        else{
            header("Location: /login.php");
        }

Вопрос как организовать проверку в файле  admin.php
Я набросал в файле admin.php

<?php
     if($_SESSION['username'] !=''){
          if($_SESSION['username'] == ??? с чем сравнивать)
     
    }
?>

Покажите пример кто может!!!!!!!!!!!!!!

Debian 7.6 (Stable)

2

В недалеком прошлом у меня была такая галлюцинация.
В базе имеется таблица
1 колонка - Имя
2 колонка - MD5(login+password+erunda)
3 колонка - идентификатор выданный пользователю
4 колонка - время до которого этот идентификатор действует

Скрипт логина, получающий методом post имя и пароль

<?php
  if(isset($_POST['name'])){
    include 't/connect.php';
    $log=addslashes($_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("vmovsid","$tmp",time()+3600))
        header("Location: ");   // при успешной авторизации перейдет по адресу
    else
       exit("невозможно установить кукиесы");
     }
     else
      exit ("нетуда брынь $mysql_error()");
    }
    else{
       echo "неправильно введен пароль";
        header("Location: куда-нить");
    }
  }
 else 
    exit ("за вами выехала милиция");
?>

Скрипт получает логин имя и пароль, далее MD5(login+password+erunda) сравнивается со значением в базе для пользователя "имя". Если успешно выдаем пользователю кукиес с идентификатором, также этот идентификатор записываем в базу и устанавливаем время до которого по нему можно входить.

Во все файлы к которым ограничен доступ обычным пользователям добавляем строку

<?php include 'secure.php'?>

Скрипт secure.php проверяет наличие идентификатора полученного от пользователя на валидность

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

По мне так вполне работоспособно. Правда требует некоторых доработок кода.

3

Спасибо за ответ!
Но я уже решил эту проблему... ab

Debian 7.6 (Stable)