커스텀 로그인 스크립트를 만들었고 잘 작동합니다. 그러나 홈페이지로 리디렉션 된 후 $ _SESSION [ 'username'] 값은 'root'로 변경됩니다. 어느 '루트'내 데이터베이스 로그인에 대한 사용자 이름입니다.PHP 세션 값이 페이지에서 페이지로 변경됩니다.
나는 손이있는 모든 입력 할 필요가, 그래서 그것은 명백한 오류가 있거나
main_login.php (모든 페이지에 포함되어 sidebar.php에 PHP는 include_once 문)
<?php
if(!isset ($_SESSION["username"])){
?>
<!-- Simple login form action="checklogin.php" method="post"-->
<?php
}else{
?>
<!-- Table to display welcome user, and logout link -->
을 두살 수
checklogin.php :
session_start();
$db_name = "database";
$tbl_name = "users";
mysql_connect("localhost","root","password") or die("Cannot connect to SQL server");
mysql_select_db("$db_name")or die("Cannot select database.");
$username = $_POST['username'];
$password = $_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$password = md5($password);
$sql = "SELECT * FROM $tbl_name WHERE username = '$username' and password = '$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count == 1){
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
header("location:login_success.php");
}
else{
echo "<script type='text/javascript'>\n";
echo "setTimeout('redirect();',2000);\n";
echo "function redirect(){\n";
echo "window.location = 'index.php';\n";
echo "}\n";
echo "</script>\n";
echo "Wrong Username or Password";
login_success.php :
<?php
session_start();
if(!isset($_SESSION['username'])){
header("location:index.php");
}else{
session_regenerate_id();
}
// Apply permissions - problem existed before all of this code
mysql_connect("localhost","root","password") or die("Cannot connect to database.");
mysql_select_db("database") or die("Cannot select database.");
$username = $_SESSION['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysql_num_rows($result);
mysql_close();
$_SESSION['username'] = mysql_result($result,0,'username');
$_SESSION['permissions'] = mysql_result($result,0,'permissions');
?>
<html>
<head>
<script type="text/javascripnt">
setTimeout("redirect();",4000);
function redirect(){
window.location = "index.php";
}
</script>
</head>
<body>
Login Successful.
<?php echo "Welcome ".$_SESSION["username"].".";
var_dump($_SESSION); // var_dump reveals that $_SESSION['username'] is still the login name.
?>
</body>
</html>
모든 과정을 거치면 모든 것이 잘됩니다. 그러나 index.php로 리다이렉트하면 $ _SESSION [ 'username']은 이제 'root'가됩니다.
나는 왜 그런 일이 일어날 지 모르는 사람이 있는지 (나는 그 문제를 이해하고 미래에 그것을 막을 수 있음), 구현할 수정 사항을 물어볼 것입니다.
모두에게 감사드립니다.
md5-hash를 생성하기 때문에 암호를 제거하고 mysql_real_escape를 제거 할 필요가 없습니다. 당신의 솔루션으로 stripslash 나 mysql_real_escape가 바뀌면 로그인이 깨질 수 있습니다 – Fender
펜더에게 감사드립니다. 나는 그것을 바꿀 것입니다. 이것은 PHP에서의 첫 번째 시도입니다 ... 결코 추측 할 수 없었을 것입니다. – Christopher
코드의 오류가 수정되지 않았습니다. 비록 내가 더 많은 담당자를 가지고있다해도, 나는 당신에게 분명히 사용되는 훌륭한 정보를 +1 해줄 것이다. 다들 감사 해요!! – Christopher