2013-08-08 3 views
1

저는 초보자 인 PHP 프로그래머이므로 쿠키를 설정할 수 없습니다. 난 그냥 양식에서 $_POST['user']$_POST['pass']의 값을 가진 쿠키를 설정하고 그것을 밖으로 인쇄하고있어, 코드에서PHP - 쿠키를 만들 수 없습니다

Notice: Undefined index: user in D:\XAMPP\htdocs\Bank\verify.php on line 28

Notice: Undefined index: pass in D:\XAMPP\htdocs\Bank\verify.php on line 28

,하지만 작동하지 않습니다

나는이 오류가 계속. 이런 일이 발생하는 이유

<form action="verify.php" method="post"> 
    Username: <input name="user" /><br /> 
    Password: <input name="pass" type="password" /><br /> 
    <input type="submit" value="Submit" /> 
</form> 

누구나 알고

setcookie("user",$_POST['user'],3600); 
setcookie("pass",$_POST['pass'],3600); 
echo $_COOKIE["user"] . " " . $_COOKIE["pass"]; // This is line 28 

그리고 여기가 내 양식입니까? 도와주세요.

감사합니다. 브라우저가 보낼 때

+0

양식을 보여주십시오. –

답변

1

쿠키는 다음 번에 페이지를 방문 할 때 사용됩니다. 따라서 다음과 같은 세 가지 일반적인 해결 방법이 있습니다. 1. 쿠키에 저장하고 처음으로 COOKIE 대신 POST 변수를 반향합니다.코드는 다음과 같이됩니다 : 당신이 정말로 쿠키 암호 (아주 나쁜 아이디어)을 저장하려면

setcookie('user', $_POST['user'], time()+3600); // notice time() function 
setcookie('pass', $_POST['pass'], time()+3600); // you cant use absolute value here 

if (!isset($_COOKIE['user'])) echo $_POST['user'] . ' ' . $_POST['pass']; 
    else echo $_COOKIE['user'] . ' ' . $_COOKIE['pass']; 

,하지만, 다음 적어도 해시. 해시와 코드는 다음과 같이 수 : 암호를 확인하면

setcookie('pass', hash(whirlpool/*algorithm*/, $_POST['pass']/*text*/), time()+3600); 

, 다음, 그냥 해시하고 해시를 비교합니다.


2. 솔루션은 세션이지만 브라우저를 닫을 때까지만 작동하고 전체 세션은 지워집니다.
3. 가장 좋은 해결책은 사용자 + 암호를 mySQL 데이터베이스 또는 서버 측의 .txt 파일에 저장하는 것입니다. 데이터베이스에서도 누군가 해킹을 사용하여 이러한 정보를 훔칠 수 있기 때문에 해시하는 것을 잊지 마십시오. 생각하는 경우에도 웹은 안전합니다. 미안한 것보다 안전합니다.
해결 방법이 있습니다. 잠깐주의 : 중요한 것을 암호로 저장하려면 항상 해시하고, 소금에 절인 해시를 사용하십시오. Google에 해보십시오. 인터넷에서 해싱하는 방법에 대한 기사가 많이 있습니다.이 사이트를 참조하십시오. http://php.net/manual/en/faq.passwords.php

0
setcookie(); 

브라우저 은 브라우저

$_COOKIE 

에 대한 응답을 전송 다음에에 쿠키를 보내 PHP를 알려줍니다 브라우저에서 수신 된 쿠키입니다 PHP에 대한 요청

과 동일하게 설정하려고합니다. 요청

편집

는 PS가 난 그냥 배우고 이해하지만, 난 당신이 인터넷에 모든 사람들이 그들에게

+0

인터넷에있는 모든 사람이 볼 수있는 것이 아닙니다 (로그인이라고 가정하면 클라이언트는 서버로 보낼 필요가 있으므로 HTTPS 만 도움이됩니다). 더 큰 문제는 연결 자체가 보호 된 경우에도 클라이언트의 파일 시스템에 액세스 할 수있는 사람이 쿠키를 볼 수 있다는 것입니다. – brianmearns

+0

그러나 정상 로그인에서 사용자 ID와 비밀번호는 로그인 요청과 함께 한 번만 전송됩니다. 쿠키는 __every__ 요청과 함께 해당 도메인에 전송됩니다. –

+0

사실, 문제가 악화되지만 * 보안 연결을 사용하지 않는 경우 암호를 보내려면 한 번만해도 어쨌든 사용자를 괴롭 히게됩니다. – brianmearns

0

$_COOKIE을 볼 수있는 쿠키의 사용자 ID와 암호를 저장하는 계획하지 않는 유일한 희망입니다 (웹 클라이언트에서) 요청에서 스크립트로 전달 된 쿠키가 아니라 클라이언트에 전송할 스크립트에서 설정 한 쿠키가 아닙니다. 따라서 에 까지을 보내면 클라이언트는 클라이언트에게 을 보내고 클라이언트는 다시 돌려 보냅니다.

또한 쿠키에 암호를 설정하지 않는다고 알려주십시오. 쿠키가 원격으로 안전하지 않기 때문에 이것은 매우 나쁜 보안입니다. 일반적인 기술은 웹 서버에만 데이터를 저장하는 PHP 세션을 만든 다음 세션 ID를 쿠키에 넣는 것입니다. PHP 세션에 대한 자세한 내용은 the php online manual을 참조하십시오.

+0

좋은 아이디어. 대신 세션을 사용하는 것이 좋습니다. –

+0

세션은 여전히 ​​세션 하이재킹 *에 취약합니다. 즉, 보안 연결을 사용하지 않으면 쿠키에서 전송 된 세션 ID조차도 공격자가 볼 수 있습니다. 즉, 동일한 세션 ID와 모든 사용자가 기록한 자체 요청을 간단히 생성 할 수 있습니다 사용자의 세션으로 이 문제를 해결하는 가장 좋은 방법은 보안 연결이지만 모든 응답에서 세션 ID를 변경하는 것과 같이 좀 더 안전하게 만들 수있는 다른 방법이 있습니다. – brianmearns

0

동일한 요청으로 쿠키를 보내고받을 수 없습니다. 시도해 야 할 수정 내용은 다음과 같습니다.

if(isset($_POST['user']) && isset($_POST['pass'])){ 

setcookie("user",$_POST['user'],3600); 
setcookie("pass",$_POST['pass'],3600); 

header("location:".$_SERVER['PHP_SELF']); 

} 
if(isset($_COOKIE['user']) && isset($_COOKIE['user'])) 
{ 
echo $_COOKIE["user"] . " " . $_COOKIE["pass"]; // This is line 28 

} 

그러나 세션을 대신 사용하는 것이 좋습니다. PHP_SESSION

관련 문제