2013-05-17 6 views
0

저는 얼마 전에 PHP와 MySQL을 익혔으며 문제가 발생했습니다. 사용자 데이터베이스 (MySQL), 로그인 양식 및 성공적인 로그인 후 리디렉션 될 것으로 예상되는 페이지를 만들었습니다. 나는 header("Location: index_account.php")을 추가 할 때까지리디렉션 후 세션 변수가 손실되었습니다 (헤더 사용)

로그인 페이지

<?php 

require_once 'login.php'; //connecting to db 
$db_server = mysql_connect($db_hostname, $db_username, $db_password); 
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database) 
or die("Unable to select database: " . mysql_error()); 

session_start(); // 
if (isset($_POST['username']) && 
isset($_POST['password'])) 

{ 
$username = $_POST["username"]; 
$password = $_POST["password"]; 

$salt1 = "qm&h*"; 
$salt2 = "[email protected]"; 

$query = "SELECT * FROM login WHERE username='$username'"; 
$result = mysql_query($query); 
if (mysql_num_rows($result) == 0) die("Wrong username or password."); 

elseif (mysql_num_rows($result)) 
{ 
    $row = mysql_fetch_row($result); 
    $crypt_login_pass = md5("$salt1$password$salt2"); 
    if ($crypt_login_pass == $row[2]) 
    { 
     $_SESSION['username'] = $username; 
     $_SESSION['password'] = $crypt_pass; 

     header("Location: index_account.php"); 
     exit; 
    } 
    else { 
     die("Wrong username or password."); 
    } 
} 
} 
?> 

이 코드는 완벽하게 달렸다. 나는 거기에 단지 die("You are now logged in.") 있었.

<?php 
session_start(); 
if (isset($_SESSION['username']) && 
isset($_SESSION['password'])) 
{ 
$username = $_SESSION['username']; 
$password = $_SESSION['password']; 

echo "Your username is '$username' 
and your crypted password is '$password'."; 
} 
else echo "Please <a href=index.php>click here</a> to log in."; 
?> 

이 모든 코드가 로컬 호스트에서 실행되고 : 그리고 여기 당신이로 리디렉션 supposted하는 페이지입니다. 문제는 $ _SESSION [ 'username'] 및 $ _SESSION [ 'password']이 (가) 두 번째 페이지 (index_account.php)로 전송되지 않는다는 것입니다. 나는 많은 게시물을 읽었으며 가장 많이 발견 된 것은 이것이다 : Session variables lost after header redirect 그러나 답이 없다. 이것은 (HTML과 CSS를 제외하고) 나의 첫 번째 프로그래밍 언어이며 아직까지는 이것에 대해 아주 새롭다는 점에 유의하십시오.

P. 내 Enlish를 유감으로 여긴다. 제 모국어가 아닙니다.

미리 감사드립니다.

+0

[** 새 코드 **에서 mysql_ * 함수를 사용하지 마십시오 (http://bit.ly/phpmsql). 그들은 더 이상 유지 관리되지 않으며 [공식적으로 사용되지 않습니다] (http://j.mp/XqV7Lp)이며 [실시간 코드에서 위험 할 수 있습니다] (http://bit.ly/4zUdtT). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). – Jimbo

답변

5

존재하지 않는 변수를 사용하여 암호를 할당됩니다

$_SESSION['password'] = $crypt_pass; 

귀하의 코드가 정의를 $crypt_login_pass 그래서 당신은 대신에를 사용해야합니다

$_SESSION['password'] = $crypt_login_pass; 

또한, $_SESSION['username']의 값을 얻는다 $username에서 설정되며 $_POST['username']이 설정되지 않은 경우 비어있게됩니다.

이 문제를 해결하려면 양식이 '사용자 이름'입력란에 데이터를 게시했는지 확인하십시오.

+0

고마워요! 그것을 간단하게 믿을 수는 없지만, 나는 $ _SESSION에 너무 집중하여 방금 명백한 실수를 완전히 무시한 것을 배웠습니다. – rancor1223

관련 문제