저는 얼마 전에 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를 유감으로 여긴다. 제 모국어가 아닙니다.
미리 감사드립니다.
[** 새 코드 **에서 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