2013-07-17 5 views
2

내가 작업하고있는 일부 코드로이 작은 문제를 해결할 수 있기를 바랍니다. 염두에 두십시오, 이것은 다만 취미 위치를 위해이다, 나는 안전 구멍이다는 것을 알고있다. 사용자가 "remember me"상자를 체크하면 로그인 스크립트와 등록 페이지에서 호출되는 set_remember_cookies라는 함수를 작성했습니다.PHP setcookie 함수가 쿠키를 저장하지 않습니까?

각 보안 페이지에 함수는 다음을 수행하십시오 기억 쿠키

  • 는 쿠키에 해시 된 사용자 이름과 관련된 USER_ID를 찾기 위해 데이터베이스를 조회 설정되어 있는지 확인하기 위해

    1. 확인
    2. 사용자 테이블에서 해당 User_ID의 암호를 가져옵니다.
    3. remember_cookies 테이블에서 소금을 가져옵니다.
    4. 해시 암호 + 소금 및 해시 된 p와 일치시킵니다. 쿠키의 assword

    다시 말해 쿠키에 해시 된 암호도 저장하는 것은 안전하지 않지만 지금은 걱정하지 않습니다.

    내 문제는 아래에 포함 된 set_remember_cookies 함수가 실제로 쿠키를 설정하지 않는다는 것입니다. 보안 페이지에서 첫 번째 단계 (쿠키가 있는지 확인)가 실패합니다. 나는 또한 브라우저에서 쿠키를 확인했는데 저장되지 않았다.

    이 기능이 쿠키를 설정하지 않는 이유는 누구에게 설명 할 수 있습니까? 나는 어떤 오류도 찾을 수 없지만 누군가가 할 수 있기를 바랍니다! 감사!

    <?php 
         function set_remember_cookies($uid, $identifier, $password) { 
          mysql_query("DELETE FROM remember_cookies WHERE User_ID = '$uid'"); //Delete old cookie records 
          $salt = sha1(uniqid(time() . $_SERVER['HTTP_REFERER'])); 
          $username_hash = hash("sha256", $identifier . $salt); //Hash the username 
          if (mysql_query("INSERT INTO remember_cookies (User_ID, Username_Hash, Salt) VALUES ('$uid', '$username_hash', '$salt')")) { 
           setcookie("Username", $username_hash, 60*60*24*365); 
           setcookie("Password", hash("sha512", $password . $salt), 60*60*24*365); 
          } 
         } 
        ?> 
    
  • 답변

    6

    쿠키는 1971 년에 만료되었습니다. 당신이 미래에 오프셋 1 년하려는, 그래서 세 번째 매개 변수가 '지금'오프셋되지

    setcookie("Username", $username_hash, time() + 60*60*24*365); 
    

    시도 할 것 같은데, 그것은 Unix epoch의 시작에서 오프셋이야 - rather fine manuals이 명확해야합니까 :)

    +0

    음 ... 나는 단순한 것을 간과 한 느낌이 들었습니다. 나는 전에 쿠키를 사용했고, 오늘 3 번 정도 그 문서를 다시 읽어야합니다. 오 잘, 때로는 뭔가 추측 할 누군가가 필요해. 롤! 고맙습니다! – HockeyRef45

    1

    setcookie(name, $value, $expire);

    설명서에 따르면 : 당신은 시간()

    쿠키가 만료 시간에 만료 시간을 추가해야합니다. 유닉스 타임 스탬프이므로 신기원 이래로 초 수는 입니다. 즉, 이 만료되기 전에 time() 함수에 초 수를 더한 값을 사용하여이 값을 으로 설정할 가능성이 높습니다. 또는 mktime()을 사용할 수도 있습니다. time() + 60 * 60 * 24 * 30 쿠키는 30 일 후에 만료됩니다. 0으로 설정하거나 생략하면 쿠키가 세션이 끝날 때 만료됩니다 (브라우저 이 종료 될 때).

    관련 문제