Вы не зашли.
Главная » PHP » авторизация $_COOKIE
#41. tipsun Off (19)
Moderator
2011.04.13 18:06
Вот сделал. Подскажите пожалуйста, нет ли ошибок? А то я вот только начал use PDO...
Код:
<?php
 
/////
$time    $_SERVER['REQUEST_TIME']; //Время с запуска страницы
$offline $time 240;              //Лимит тунеянства
/////
$browser = isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']) ? $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'] : $_SERVER['HTTP_USER_AGENT'];
//Получание данных о браузере
$ip      $_SERVER['REMOTE_ADDR'];
//Получение данных об ip-адресе
 
//DB CONNECTION//
$host_db 'mysql:host=localhost;dbname=tsb';
$user    'root';
$pass    '';
/////
$db = new PDO($host_db$user$pass); //Соединение с БД
$db->exec("SET NAMES 'utf8';");        //Установка кодировки
 
//SESSION//
if(isset($_COOKIE['PHPSESSID']))
  {
    session_start();
    
    if(isset($_COOKIE['REMEMBER']) AND $_SESSION['ip'] != $ip)
    {
      $Hq1 $db->prepare("SELECT `id`, `team` FROM `users` WHERE `remember`=1 AND `ip`=? LIMIT 1;");
      $Hq2 $db->prepare("UPDATE `users` SET `online`='$time', `browser`=?, WHERE `ip`=? LIMIT 1;");
      /////
      $Hq1->execute(array($ip));
      
      if($Hq1->rowcount())
      {
        $_SESSION null;
        session_regenerate_id(1);
        
        $Ha $Hq1->fetch(PDO::FETCH_ASSOC);
        $Hq1->closecursor();
        
        $_SESSION['id']   = $Ha['id'];   //Из базы будет извлекаться...
        $_SESSION['team'] = $Ha['team']; //Из базы будет извлекаться...
        $_SESSION['ip']   = $ip;
        /////
        $Hq2->execute(array($browser$ip));
        $Hq2->closecursor();
      }
      else
      {
        $_SESSION null;
        session_destroy();
      }
    }
    elseif(!isset($_COOKIE['REMEMBER']) AND $_SESSION['ip'] != $ip)
    {
      $_SESSION null;
      session_destroy();
    }
  }
  else
  {
    $Hq3 $db->prepare("REPLACE INTO `guests` SET `online`='$time', `browser`=?, `ip`=?;");
    $Hq3->execute(array($browser$ip));
    $Hq3->closecursor();
  }
 
?>
Друг подсказал, что надо и браузер в это дело подключить и еще ип сравнивать только по 3м первым диапазонам. 4ый меняется.
Отредактировано tipsun (2011.04.13 22:10)
#42. Nu3oN Off (11)
Moderator
2011.04.14 00:12
вместо $db->exec("SET NAMES 'utf8';"); делай так
Код:
<?php
$db = new PDO($host_db$user$pass, array(PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`'));
?>
Вместо fetch(PDO::FETCH_ASSOC); укажи один раз, и вс smile
Код:
<?php
$db-> setAttribute(PDO :: ATTR_DEFAULT_FETCH_MODEPDO :: FETCH_ASSOC);
?>
Вот это:
Код:
<?php
$stmt $db -> prepare("...");
$stmt -> execute(array(...));
$stmt -> closecursor();
?>
Сделай как плагинизацию (в котором ты будешь разширять класс пдо) такой метод

Код:
<?php
class ClassBase extends PDO {
 
   //  ля ля ля
 
    /**
    * prepare
    *
    * @param  string $sql    Строка запроса.
    * @return object
    **/  
    
    public function prepare($sql)
    {
    
        $stmt parent :: prepare($sql, array(PDO :: ATTR_STATEMENT_CLASS => array('PDOStatement')));
        return $stmt;
    }
}
 
?>
В общем глянь как это в роторе сделано! удобней чем каждый раз это все писать!
Я буду лучше голоден, но между креслом и рулем и на дороге.
#43. tipsun Off (19)
Moderator
2011.04.14 00:12
Спс smile
Как будет время рассмотрю остальную половину сообщения. Под рукой компа нет... С моб не удобно...
Как бы мне снова не заблудиться smile
Отредактировано tipsun (2011.04.14 12:12)
#44. Gemorroj On (107)
Administrator
2011.04.14 11:11
Nu3oN написал:
$db = new PDO($host_db, $user, $pass, array(PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`'));
http://php.net/ChangeLog-5.php#5.3.6
Implemented FR #47802 (Support for setting character sets in DSN strings). (Kalle)
так, к сведению, начиная с PHP 5.3.6 кодировку можно указвыать прямо в строке подключения
#45. tipsun Off (19)
Moderator
2011.04.14 12:12
Ахринеть, это только сессия! big_smile

Надо более компактно и логично сделать...

Код:
<?php
 
$time    $_SERVER['REQUEST_TIME']; //Время с запуска страницы
$offline $time 240;              //Лимит тунеянства
/////
$browser $_SERVER['HTTP_USER_AGENT'];
$ip      $_SERVER['REMOTE_ADDR'];
$stat_ip substr($ip0strrpos($ip'.'));
 
//DB CONNECTION//
$base = array(
'localhost'//Host
'root',      //User
'',          //Pass
'tsb',       //Base
'utf8');     //Char
 
if('5.3.6' phpversion())
  {
    $attr[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES `'.$base[4].'`;';
  }
 
$db = new PDO('mysql:host='.$base[0].';dbname='.$base[3].';charset='.$base[4].';'$base[1], $base[2], $attr);
 
//SESSION//
if(!empty($_COOKIE['PHPSESSID']))
  {
    session_start();
    
    if(!empty($_COOKIE['REMEMBER']) && $_SESSION['browser'] != $browser && $_SESSION['ip'] != $stat_ip)
    {
      $Hq1 $db->prepare("
      SELECT `id`, `team`
      FROM `users`
      WHERE `remember`=1 AND `browser`=? AND `ip` LIKE ?;");
      
      $Hq2 $db->prepare("
      UPDATE `users`
      SET `online`='$time'
      WHERE `browser`=? AND `ip` LIKE ?;");
      /////
      $Hq1->execute(array($browser$stat_ip.'%'));
      
      if($Hq1->rowcount())
      {
        $_SESSION null;
        session_regenerate_id(1);
        
        $Ha $Hq1->fetch(PDO::FETCH_ASSOC);
        $Hq1->closecursor();
        
        $_SESSION['id']      = $Ha['id'];
        $_SESSION['team']    = $Ha['team'];
        $_SESSION['browser'] = $browser;
        $_SESSION['ip']      = $stat_ip;
        /////
        $Hq2->execute(array($browser$stat_ip.'%'));
        $Hq2->closecursor();
      }
      else
      {
        $_SESSION null;
        session_destroy();
        setcookie('PHPSESSID'null);
      }
    }
    elseif(empty($_COOKIE['REMEMBER']) && $_SESSION['browser'] != $browser && $_SESSION['ip'] != $stat_ip)
    {
      $_SESSION null;
      session_destroy();
      setcookie('PHPSESSID'null);
    }
  }
  else
  {
    $Hq3 $db->prepare("
    REPLACE INTO `guests`
    SET `online`='$time', `browser`=?, `ip`=?;");
    $Hq3->execute(array($browser$ip));
    $Hq3->closecursor();
  }
 
?>
Отредактировано tipsun (2011.04.16 18:06)
#46. tipsun Off (19)
Moderator
2011.04.17 10:10
Чет мне народ говорит, что говнокод.
Типа по диапазону не стоит проверять, да и если так, то можно через модем билайн зайти, браузер поставить как у жертвы и все...
- - - -
Как тогда сделать?
Отредактировано tipsun (2011.04.17 10:10)
#47. Gemorroj On (107)
Administrator
2011.04.17 11:11
я вообще не понимаю, нафига ты что-то мудришь? ты банковскую систему чтоли пишешь? идентифицируй пользователя по сессии и хватит. если пользователь умудрился потерять потерять куки, то ему уже ничто не поможет, ИМХО.
#48. tipsun Off (19)
Moderator
2011.04.17 11:11
Вебмани хотел переплюнуть big_smile
- - - -
Снова я заблудился.
- - - -
Пофиг на функцию запомнить...
Вот типа авторизовался, побродил.
Вышел кука ид сессии удалилась, она ведь при закрытия браузера удаляется...
И эмм... все?
- - - -
Код:
<?php
 
if($_COOKIE['PHPSESSID'])
  {
    session_start();
  }
 
?>
Отредактировано tipsun (2011.04.17 12:12)
#49. НЕЗНАЙКА Off (11)
Участник
2011.04.17 13:01
Зачем вообще на куках делать? Сессия же интереснее  и никто не увидит хэш.
ДАУН-Данная Аватара Унаследована Незнайкой
#50. Gemorroj On (107)
Administrator
2011.04.17 13:01
tipsun написал:
И эмм... все?
http://www.php.net/manual/en/function.s … params.php
Страниц: 13 4 5 6 712 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s