2013-09-05 4 views
1

у меня есть проблемы с моим Cookie настройки это строка кода:Мой Cookie не установлен правильно

if(!empty($userdata)) { 

    $qry = mysql_query("SELECT * FROM st_user WHERE oid = '$uid'"); 
    $get_array = mysql_fetch_array($qry); 

    $set_id_session = md5($username); 
    //And then set cookies 
    setcookie('FBSESSID', '$set_id_session', time()+86400, '/', '.setujuh.com'); //Cookie set at this line 

    $do_sess = $_COOKIE['FBSESSID']; 

    echo $_COOKIE['FBSESSID']; 
    print_r($_COOKIE); 

    $date = date('Y-m-d h:i:s'); 

    mysql_query ("UPDATE st_user SET fb_sess_id = '$do_sess', lastvisitDate = '$date' WHERE oid = '$uid'"); 

} 

мой вопрос, почему мой Cookie не установлен, когда я пытаюсь вызвать его?

+1

Откуда берется «$ username»? – MisterBla

+0

$ username - получить из моей базы данных. –

+0

Разве вы не должны делать '$ get_array ['username']' then? – MisterBla

ответ

0

Необходимо определить, какое имя пользователя содержит. В противном случае это будет NULL

$username = $get_array['username'] 

Предполагая, что $ UserData не пусто, так как в противном случае запрос SQL никогда не будет выполнена

UPDATE

Это действительно плохая идея назвать md5 ($ имя пользователя) в качестве идентификатора сеанса, так как этот идентификатор будет одинаковым при каждом входе в систему, и вы можете олицетворять другую учетную запись, если знаете имя пользователя

0

Удалите одинарные кавычки около $set_id_session. Для начала это не нужно, поскольку это уже строка, но, что более важно, переменные интерполируются только при использовании двойных кавычек.

0

Некоторое время назад я взял защищенный генератор случайности, который должен быть идеальным для вашего токена проверки cookie (Session ID);

function TokenGenerator($Length) 
    { 
     $CharPool = ''; 
     $CharPool .= 'abcdefghijklmnopqrstuvwxyz'; 
     $CharPool .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 

     $RandomNumber = function($Minimum, $Maximum) 
     {   
      # Find the range of the maximum and minimum allowed output 
      $Range = $Maximum - $Minimum; 

      # If the range is less than 0 forget the rest and return the minimum allowed number as a 'random' bit 
      if($Range < 0) 
      { 
       return $Minimum; 
      } 

      # Calculate the logarithm for $Range variable 
      $Logarithm = (int) log($Range, 2)+1; 

      $ByteLength = (int) ($Logarithm-1/8)+1; 

      $BitF = (int) (1 << $Logarithm)-1; 

      do 
      { 
       # Get some random binary bytes 
       $RndBinBytes = openssl_random_pseudo_bytes($ByteLength); 

       # Converts the binary to hexadecimal 
       $HexBytes = bin2hex($RndBinBytes); 

       # Convert the hexadecimal bytes to decimal 
       $Random = hexdec($HexBytes); 

       # Use the AND operator to discard the unneeded bits 
       $Random = $Random & $BitF; 
      } 
      while($Random >= $Range); 

      # Return the random number found by the sub function to the main function 
      return $Minimum + $Random; 
     }; 

     # Initialise the RandChars variable 
     $RandChars = ''; 

     $LengthOfPool = strlen($CharPool); 

     for ($Counter = 0; $Counter < $Length; $Counter +=1) 
     { 
      $RandNum = $RandomNumber(0, $LengthOfPool); 

      # Pick from the pool of chars 
      $RandChar = $CharPool[$RandNum]; 

      # Append the random char to the token to be returned at the end 
      $RandChars .= $RandChar; 
     } 
     return $RandChars; 
    } 

Чтобы добавить еще один уровень безопасности для вашего плана печенья вы можете зашифровать содержимое куки, чтобы гарантировать, что печенье не подделаны в первую очередь, когда я установил печенье я использую этот класс;

class CookieMonster 
    { 
     private $CookieKey = 'SecurePassword'; 

     public function SetCookie($Name, $Data, $Expire=31536000) 
     { 
      if($Data == '') 
      { 
       return FALSE; 
      } 

      if($Name == '') 
      { 
       return FALSE; 
      } 

      if($Key == '') 
      { 
       return FALSE; 
      } 

      return setcookie($Name, $this->Encrypt($Data, $this->CookieKey), $Expire); 
     } 

     public function DeleteCookie($Name) 
     { 
      if(isset($_COOKIE[$Name])) 
      { 
       return setcookie($Name, '', 1); 
      } 
     } 

     public function ReadCookie($Name) 
     { 
      if(isset($_COOKIE[$Name])) 
      { 
       return $this->Decrypt($_COOKIE[$Name], $this->CookieKey); 
      }else{ 
       return FALSE; 
      } 
     } 

     public function Encrypt($Data, $Key) 
     { 
      return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, sha1($Key), $Data, MCRYPT_MODE_CBC, md5(sha1($Key)))); 
     } 

     public function Decrypt($Data, $Key) 
     { 
      return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, sha1($Key), base64_decode($Data), MCRYPT_MODE_CBC, md5(sha1($Key))), "\0"); 
     } 
    } 
Смежные вопросы