2013-11-20 3 views
0

현재 Wamp로 만든 localhost에서 작동하는 웹 사이트에 대한 PHP 기반 로그인을 구축하고 있지만 원격으로 파일을 복사하면 작동하지 않습니다 서버에 설치하고 동일한 데이터베이스를 설정하십시오. 데이터베이스와의 연결은 사이트에 새로운 사용자를 등록 할 수 있고 사이트에서 데이터베이스에서 제거해야 할 모든 것을 보여주기 때문에 괜찮습니다.세션 기반 로그인이 원격 서버에서 작동하지 않습니다

사이트의 로그인 부분에 문제가있는 것은 단순히 아무것도 수행하지 않는다는 것입니다. 나는 로그인을 시도하고 적절한 계정 세부 사항이있는 경우 로그인이 성공적이라고 말하며 테스트 목적을 위해 세션 변수를 에코합니다 (예 : 데이터베이스에 저장된 사용자 ID 표시). 그러나 다른 페이지로 이동하면 사용자가 전혀 로그인하지 않은 것입니다. 나는 문제가 무엇을 참조하는 것이 중요 할 것을 여기에 모든 코드를 나열하려고합니다 :

로그인 양식 :

<form action="submit.php" method="POST" id="loginForm"> 
    <fieldset> 
     <table id="form_Table"> 
      <tr> 
       <td><label for="login_Username">Username</label></td> 
       <td><input type="text" name="login_Username" id="login_Username" class="" /></td> 
      </tr> 
      <tr> 
       <td><label for="login_Password">Password</label></td> 
       <td><input type="password" name="login_Password" id="login_Password" class="" /></td> 
      </tr> 
     </table> 
    <p class="submit"><input type="submit" name="login_Submit" value="Log in" /></p> 
    </fieldset> 
</form> 

submit.php에 로그인 절차를 처리하는 PHP 코드 :

if (isset($_POST['login_Submit'])) { 
    if (!empty($_POST['login_Username']) && !empty($_POST['login_Password'])) { 

     $username = mysql_real_escape_string($_POST['login_Username']); 
     $password = md5(mysql_real_escape_string($_POST['login_Password'])); 

     $sql = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password'"; 
     $checklogin = mysql_query($sql); 


     $result = mysql_query($sql); 
     if($result === FALSE) { 
      die(mysql_error()); 
     } 

     if(mysql_num_rows($checklogin) == "1") { 
      $row = mysql_fetch_array($checklogin); 
      $group = $row['group']; 
      $userid = $row['id']; 
      $cart = array(); 
      $_SESSION['Username'] = $username; 
      $_SESSION['Group'] = $group; 
      $_SESSION['UserID'] = $userid; 
      $_SESSION['LoggedIn'] = 1; 
      $_SESSION['cart'] = $cart; 
      echo '<h1>Logged in successfully!</h1>'; 
      //echo '<meta http-equiv="refresh" content="1;index.php">'; 
      echo $_SESSION['Username']; 
      echo $_SESSION['LoggedIn']; 
      echo $_SESSION['UserID']; 
      echo $_SESSION['Group']; 
      } else { 
      echo '<h1>Wrong username or password!</h1>'; 
       } 
      } 
     } 

의 index.php :

<?php 
@session_start(); 
include 'header.php'; 
?> 

connection.php :

<?php 
@session_start(); 

//connect variables are here 

mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL connection error: " . mysql_error()); 
mysql_select_db($dbname) or die("MySQL database error: " . mysql_error()); 
mysql_query('SET NAMES utf8'); 

?> 

header.php :

<?php include 'connection.php'; 
@session_start();?> 

내 추측은 내가 주어진 페이지를 떠나면 어떤 이유로 사이트가 (필자는 @session_start를 추가 그 이유는, 세션 변수를 유지하지 않는 것이 었습니다)에 여러 페이지가 있지만이 방법으로는 작동하지 않습니다.

나는 지금 무엇을 할 수 있는지에 대한 아이디어가 없어져서 어떤 도움을 주시면 감사하겠습니다. 고맙습니다.

+0

'www'에서 'www가 아닌'페이지로의 리디렉션이 있습니까? 하나의 세션 설정은 다른 세션에 설정되지 않으므로 –

+0

mysql_ 함수는 준비된 문장으로 MySQLi 나 PDO를 조사해야한다. – Fredd

+0

은 inital $ _SESSION 변수를 설정 한 곳을 포함하여 모든 페이지에서 session_start입니까? session_start 앞에 @를 제거해보십시오. 어떤 오류가 있습니까? – Fredd

답변

2

"헤더를 이미 보냈습니다"라는 오류가 발생하면 조기 출력을 담당하는 파일과 라인을 지정해야합니다.

파일 중 하나에서 PHP 닫는 태그 뒤에 공백이있을 수 있습니다. 이것이 그와 같은 문제이기 때문에 닫는 PHP 태그를 완전히 생략하는 것이 좋습니다. PHP 파서는 상관하지 않습니다. 왜 그렇습니까? :)

간단히 말해 출력 버퍼링을 사용하는 것이 좋지만이 경우에는 필요하지 않습니다.

쿠키가 설정되어 있는지 확인 했습니까? 어디에서 전화 하시는지 session_destroy()? session_start()은 한 번만 호출해야합니다. 부트 스트랩 파일에 넣고 각 페이지의 내용을 포함시키는 것이 좋습니다.

+0

그 오류는 줄 1에 session_start()가있는 동일한 줄을 지정합니다. 공백을 두 번 확인했는데 찾을 수 없으며 가능한 한 코드를 축소했습니다. –

+0

브라우저로 전송 된 후 페이지에 대한 소스 코드를 pasteie.org에 붙여서 링크를 게시 할 수 있습니까? 일반적으로 브라우저에서 Ctrl + U를 누르면 해당 페이지의 소스 코드가 표시됩니다. – thefuzzy0ne

+0

늦게 응답해서 죄송합니다. 집에 없었습니다. 저기 있습니다 : http://pastie.org/8498057 그러나, 지금 내가 할 수있는 최선의 방법은 mysqli/PDO를 사용하여 단계별로 사이트를 재 구축하고 이것이 효과가 있는지 없는지를 확인하는 것입니다. –

관련 문제