2011-06-11 6 views
0

어떻게 제대로 로그인 폼에 확인란을 선택시 사용자의 사용자 이름과 비밀번호를 기억하기 위해 쿠키를 설정하는 스크립트를 작성합니다?나를 기억하십시오 JavaScript?

또한 PHP에서 수행 할 수있는 경우 알려 주시기 바랍니다.

+1

비밀번호는 기억할 수 있지만 기억하지 못할 수도 있습니다. 암호를 서버의 사용자 테이블에 저장할 필요가 없으며 강력한 해싱 알고리즘 (최소, sha1)을 사용하여 해시되어야합니다. –

답변

0

PHP에서 $_SESSION의 적절한 값을 set_cookie을 사용하여 $_COOKIE으로 복사하여 세션 정보 (사용자 이름, 비밀번호)로 쿠키를 설정하십시오. 사용자가 페이지를 방문하면 먼저 $_SESSION 개의 변수가 있는지 확인한 다음 $_COOKIE 개의 변수를 확인합니다. $_COOKIE 변수가 존재하지만 $_SESSION 것들, $_SESSION$_COOKIE 복사하지 마십시오. (즉, 사용자가 상자를 검사하는 경우)

+0

물론'$ _COOKIE'는 마술이 아니기 때문에'set_cookie'를 의미합니다. –

+0

네, 당연히 저것은 제가 의미하는 바입니다 ... 혼란스러워졌습니다. – Ryan

+1

세션 설정이있는 경우 쿠키가 수행해야하는 것은 다시 초기화 할 수있는 저장된 (DB에서) 세션을 가리키는 것입니다. 나는 클라이언트가 쿠키에 저장된 사용자 이름과 암호를 필요로한다고 동의하지 않습니다. 세션에는 IMO에 저장된 암호가 필요하지 않습니다. –

0

위와 같이 @minitech에서 제안한대로 할 수 있습니다. 그러나 암호 정보를 쿠키에 저장하는 것은 좋은 생각이 아닙니다. 컴퓨터에서 쉽게 추출 할 수 있습니다.

한 번 로그인하여 쿠키에 저장하는 데 사용할 수있는 일회용 해시를 만드는 것이 좋습니다. 한번 그것의 그것의 무효화 된 사용. 그것은 완벽하게 안전하지는 않지만 (어쨌든 세션만큼 안전합니다. 더 안전하게하려면 https를 강제 실행하십시오), 사용자 비밀번호를 손상시키지 않습니다.

사용자들은 여러 사이트에서 동일한 비밀번호를 사용합니다. 한 사이트에서 해킹당한 경우 다른 사이트의 사용자 계정에 쉽게 침입 할 수 있습니다.

2

비밀번호를 기억하는 가장 좋은 방법은 일부 브라우저 관련 데이터와 함께 md5 해시로 저장하는 것입니다. 예를 들어, 예를 들어, 우리의 목표는 우리의 문자열이 충분히 복잡하고있다이

$string=$username.'-'.md5(substr($http_user_agent, 5, 10)) .md5($password).md5(substr($http_user_agent, 0, 10)); 

같은 PHP에서이 문자열을 생성 할 수있는 등

username-4155b1b6e53ad73e06c4c58e709cdeea19915ea84de517500d9ba3280e27cf59 

로 문자열을 저장합니다. 로그인 단계에서 우리는 우리가 알고있는 방법으로 암호 md5를 추출합니다.

$somearray=explode('-', $string); 
$username=$somearray[0]; 
$passwordmd5=str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string)); 

지금, 우리는이 같은 우리의 데이타베이스는 비교를 할 수있는,

select * from users where username='$username' and md5(password)='$passwordmd5'; 

HTTP 사용자 에이전트 물건은 약간에게 쿠키 문자열의 무단 사용의 위험을 제거합니다. 권한이없는 사람이 쿠키를 훔쳐도 다른 브라우저에서이 쿠키를 사용할 수 없습니다. 우리가 그렇게하지 않았다면 같은 문자열을 가진 사람이 마치 패스워드를 가지고있는 것처럼 행동 할 수 있으며 실제 사용자로 로그인 할 수 있습니다.

0
$somearray = explode('-', $string); 
$username = $somearray[0]; 
$passwordmd5 = str_replace(md5(substr($http_user_agent, 0, 10)),'',str_replace(md5(substr($http_user_agent, 5, 10)),'', $string)); 
관련 문제