Показать сообщение отдельно
Старый 25.09.2010, 05:10   #30
Праведник
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 80
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 13 сообщениях
Праведник На верном пути
По умолчанию

Всегда при держивался логики: всё гениальное, просто.
К данной пословице частично подходит авторизация, которую сделал Кот Да Винчи в своём личном кабинете.

Изначально выглядит так:

Код:
if (isset($_POST['auth_name'])) 
   {
   $par= SHA1(strtoupper($_POST['auth_name']).':'.strtoupper($_POST['auth_pass']));
   $cont = mysql_connect($r_ip, $r_userdb, $r_pw);
   mysql_select_db($r_db, $cont);
   mysql_query("SET NAMES '$encoding'");   
   $res = mysql_query('SELECT * FROM `account` WHERE `username`="'.strtoupper(addslashes($_POST['auth_name'])).'" AND sha_pass_hash ="'.$par.'"');
   if ($row = mysql_fetch_assoc($res))
      {
       session_start();
       $_SESSION['user_id'] = (int)$row['id'];
       $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
       $_SESSION['kito'] = strtoupper($_POST['auth_name']);
       $_SESSION['slovo'] = strtoupper($par);
       $_SESSION['gnom'] = (int)$row['gmlevel'];
       $_SESSION['modul'] = 'news';
       $_SESSION['acpskin'] = $acpskin;
       }
   header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
   exit;
   }
Ничего сверхъестественного, всё просто и доступно.
Ну особые параноики (я сам оказался таковым ) могут добавить ещё некий хеш (допустим, добавим к таблице account поле hash) + DBSimple и получим такой вариант:

Код:
session_start();
if( isset( $_POST['accountName'] )) {
$passw = SHA1(strtoupper(trim($_POST['accountName'])).':'.strtoupper(trim($_POST['password'])));
$name = strtoupper(trim($_POST['accountName']));
$member_check = $realmd->selectRow('SELECT `id`, `gmlevel` FROM `account` WHERE `username` = ? AND sha_pass_hash= ?', $name, $passw);
      if ($member_check['id']) {        
            $_SESSION['user_id'] = $member_check['id'];
            $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
            $_SESSION['gmlevel'] = $member_check['gmlevel'];
            $_SESSION['template'] = $config['templates'];
            $_SESSION['hash'] = md5($member_check['id'].'_'.$_SERVER['REMOTE_ADDR'].date('d.m', time()));
            
          $realmd->query('UPDATE `account` set `hash` = ? WHERE `id`= ?', $_SESSION['hash'], $member_check['id']);
     }
   header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
 }
При использовании проверяем ещё и наличие такового хеша в базе. Для ещё больших фанатиков можно предложить контролить изменение IP адреса + какого-нибудь случайного "довеска" к нему. Но на самом деле, на фоне того, что сессии подделать/украсть невозможно, всё это как-то даже не смотрится...

p.s. Само собой все введённые данные (логин и пароль) должны дополнительно проверяться на валидность с помощью регулярных выражений.

Последний раз редактировалось Konctantin; 25.10.2010 в 12:07.
Праведник вне форума   Ответить с цитированием