Вы не зашли.
Главная » PHP » авторизация $_COOKIE
#101. tipsun Off (19)
Moderator
2012.07.12 14:02
Чет я не понял что да как там.
Только как задания прописывать понял:
Показать скрытый текст
#102. Gemorroj Off (107)
Administrator
2012.07.12 18:06
ну этого и достаточно.
#103. tipsun Off (19)
Moderator
2012.07.20 14:02
Допустим можно узнать папку с PHP:
Код:
<?php
echo $_ENV['PHPRC'];
Можно узнать путь к файлу исполнения:
Код:
<?php
echo __FILE__;
А куда пихать созданный файл cgi непонятно.

Еще думал насчет другого варианта:
Код:
<?php
 
//Набросок
 
require_once 'cfg.php'//Есть массив $cfg с настройками, котрые могут быть замещены настройками с базы.
 
//$db = DB::singleton();
 
//Add settings//
//$cfg += $db->query('SELECT * FROM `cfg`;')->fetchAll(); 
 
//+ SESSION//
//! KEY `session_id`
 
if (@$_COOKIE[$cfg['cookie_name']]) {
    
    $qt 'SELECT * '
        'FROM `users` '
        'WHERE `users`.`cookie_id` = ? '
        'LIMIT 1;';
    
    $q $db->prepare($qt);
    $q->execute(array($_COOKIE[$cfg['cookie_name']]));
    
    if ($q->rowCount()) {
        
        $user += $q->fetch();
        
        //Regenerate//..............//TIMESTAMP (Не люблю UNIX_TIMESTAMP, хотя было бы куда проще)//
        if (date_format(date_create($user['cookie_regenerate_interval']), 'Ymd') < date('Ymd')) {
            
            $hash md5(microtime());
            
            $db->query('UPDATE `users` '
                       "SET `cookie_regenerate_interval` = NOW() + INTERVAL '"
                       . ((int) $cfg['cookie_regenerate_interval']['value']) . "' "
                       . ((int) $cfg['cookie_regenerate_interval']['format']) // sec.||min.||etc.
                       ", `users`.`cookie_id` = '" $hash "' "
                       "WHERE `users`.`user_id` = '" $user['user_id'] . "' "
                       'LIMIT 1;');
            
            setcookie($cfg['cookie_name'],
                      $_COOKIE[$cfg['cookie_name']] = $hash,
                      $cfg['cookie_expire'],
                      $cfg['cookie_path'],
                      $cfg['cookie_domain'],
                      $cfg['cookie_secure'],
                      $cfg['cookie_httpOnly']);
        }
    }
    else {
        
        setcookie($cfg['cookie_name'],
                  null,
                  0,
                  $cfg['cookie_path'],
                  $cfg['cookie_domain'],
                  $cfg['cookie_secure'],
                  $cfg['cookie_httpOnly']);
        
        unset($_COOKIE[$cfg['cookie_name']], $user);
    }
}
//- SESSION//
И думал может нафиг это все,
использовать стандартный путь.
#104. Gemorroj Off (107)
Administrator
2012.07.20 15:03
$hash = md5(microtime()); // тут microtime массив вернет. а md5 просит строку
лучше замени все это на uniqid() например
ну и так, напомню такой термин - KISS
#105. tipsun Off (19)
Moderator
2012.07.20 16:04
Gemorroj написал:
$hash = md5(microtime()); // тут microtime массив вернет. а md5 просит строку
Код:
<?php // v5.2.12
 
var_dump(micro_time());
//string(21) "0.11501000 1342787062"
#106. Gemorroj Off (107)
Administrator
2012.07.20 16:04
tipsun
да, запамятовал уже( чаще пользуются microtime(true)
#107. tipsun Off (19)
Moderator
2012.07.20 20:08
Gemorroj написал:
ну и так, напомню такой термин - KISS
Это к алгоритму или ко времени относится в данном случае?
#108. tipsun Off (19)
Moderator
2012.07.20 21:09
Надо будет срок_актуальности_печеньки хранить в UNIX_TIMESTAMP.
Отредактировано tipsun (2012.07.21 01:01)
#109. tipsun Off (19)
Moderator
2012.07.22 21:09
Лучше?

Код:
<?php
 
//+ SESSION//
//! KEY `session_id`
 
if (@$_COOKIE[$cfg['cookie_name']]) {
    
    $qt 'SELECT * '
        'FROM `users` '
        'WHERE `users`.`cookie_id` = ? '
        'LIMIT 1;';
    
    $q $db->prepare($qt);
    $q->execute(array($_COOKIE[$cfg['cookie_name']]));
    
    if ($q->rowCount()) {
        
        $user += $q->fetch();
        
        if ($user['cookie_timestamp'] < $_SERVER['REQUEST_TIME']) {
            
            $_COOKIE[$cfg['cookie_name']] = md5(uniqid());
            
            $db->query('UPDATE `users` '
                       "SET `users`.`cookie_timestamp` = '"
                       . ($_SERVER['REQUEST_TIME'] + (int) $cfg['cookie_lifeTime']) . "', "
                       "`users`.`cookie_id` = '" $_COOKIE[$cfg['cookie_name']] . "' "
                       "WHERE `users`.`user_id` = '" $user['user_id'] . "' "
                       'LIMIT 1;');
            
            setcookie($cfg['cookie_name'],
                      $_COOKIE[$cfg['cookie_name']],
                      $cfg['cookie_expire'],
                      $cfg['cookie_path'],
                      $cfg['cookie_domain'],
                      $cfg['cookie_secure'],
                      $cfg['cookie_httpOnly']);
        }
    }
    else {
        
        setcookie($cfg['cookie_name'],
                  null,
                  0,
                  $cfg['cookie_path'],
                  $cfg['cookie_domain'],
                  $cfg['cookie_secure'],
                  $cfg['cookie_httpOnly']);
        
        unset($_COOKIE[$cfg['cookie_name']], $user);
    }
}
//- SESSION//
#110. Gemorroj Off (107)
Administrator
2012.07.23 00:12
лучше. но UPDATE тоже переделай на параметризованный запрос. так же проверяй не только $q->rowCount() но и чтобы execute возвратил true
Страниц: 19 10 11 12 Все
Главная
WEB
PunBB Mod v0.6.2
0.015 s