2012-12-17 3 views
0

나는 만들고자하는 간단한 로그인 시스템에 문제가 있습니다.PHP 로그인 스크립트 세션이 생존하지 않습니다.

index.php를

<?php if(!isset($_SESSION['username'])){ 
session_start(); 
//present login form with action=login.php 
} else { 
//display actual page 
} 
?> 

login.php

<?php 
if(!empty($_SESSION['username'])){ 
    echo $_SESSION['username']; 
} else { 
$username=$_POST['username']; 
$password=sha1($_POST['password']); 
$link=mysqli_connect("localhost","root","password","database",3306,"/tmp/mysql.sock"); 
$query="SELECT * FROM login WHERE `name`='".$username."' AND `passwordhash`='".$password."' LIMIT 1"; 
$result=mysqli_query($link,$query); 
if(mysqli_num_rows($result)==1){ 
      session_start(); 
    $_SESSION['username']=$username; 
    $row=mysqli_fetch_assoc($result); 
    $_SESSION['firstname']=$row['firstname']; 
    $_SESSION['lastname']=$row['lastname']; 
    echo "Username: ". $_SESSION['username']." Name: ".$_SESSION['firstname']." ".$_SESSION['lastname']; //this is just here as POC. If I redirect to index.php (using header()), it shows the login form (claims $_SESSION['username'] is unset). 
} 
} 
?> 

내가 로그인하면, 그것은 login.php에 잘 내 이름과 이름과 성을 보여줍니다 (: 여기 내 설정이다 데이터베이스 문제가 아님). 그러나 index.php로 리디렉션하면 즉시 로그인 양식이 표시됩니다. 그게 무슨 문제 야? EDIT : login.php에 session_start()를 추가 한 후에도 동일한 결과가 나타납니다.

+1

'으로 session_start()'세션 변수를 사용하는 모든 파일에 포함되어야합니다. –

+1

'$ _SESSION'을 사용하기 전에'session_start();'를 호출하십시오 – Musa

답변

2

만들기으로 session_start() 파일의 첫 번째 라인이 login.php``에

또한 호출해야합니다
+0

고마워요! 나는 그것이 세션 변수를 사용하는 모든 단일 파일에서 호출 될 필요가 있다는 것을 깨닫지 못했다. 세션이 파일에 관계없이 지속될 것 같았다. 다시 한번 감사드립니다. – Aehmlo

+0

다행 당신의 문제를 해결하면이 대답을 확인하는 데 도움이 될 수 있습니다. – Yamaha32088

+0

최대한 빨리 알려 드리겠습니다. 나는 대답을 표시 할 수있을 때까지 5 분이 남았습니다. – Aehmlo

관련 문제