2012-08-10 4 views
0

저는 지금 벽에 머리를 때리고 있습니다. 나는 이것을 몇 시간 동안 손보고 있었고, 나는 그것을 알아낼 수 없다.

한 페이지에서 다른 페이지로 이동할 때 내 세션 데이터가 저장되지 않습니다. 나는 이것을 WAMP에서 설정했다.

쿠키가 저장되고 세션 데이터는 모든 스크립트가 시작될 때만 작동합니다. 나는 여기서 무엇을해야할지 잘 모릅니다. 그것은 어리석게 어리석은 무언가 일 것이다, 그러나 어떤 입력든지 중대하게 평가된다.

내 로그인 스크립트 :이 내 (쿠키는 isset 경우 설정된 세션 변수 포함) 헤더

<?php //set session if isset cookie but not session 
       session_start(); 
if(!isset($_SESSION['id'])) { 

     if(isset($_COOKIE['id']) && isset($_COOKIE['name']) && isset($_COOKIE['type'])) { 
       $_SESSION['id'] = $_COOKIE['id']; 
       $_SESSION['name'] = $_COOKIE['name']; 
       $_SESSION['type'] = $_COOKIE['type']; 
      }  
    } //end if !isset session verify 


?> 

과 세션 ID에 따라 메뉴 출력의 예입니다

<?php 


include('../partials/_header.php'); 
include('includes/connectvars.php'); 


if(!isset($_SESSION['id'])) { //logged in? 

if(isset($_POST['submit'])) {  // form submitted? 

if(!empty($_POST['email']) && !empty($_POST['password'])) { /* Check to make sure post isn't empty in case of JS override/disable */ 

     $email = mysqli_real_escape_string($dbc, trim($_POST['email'])); 
     $password = sha1(mysqli_real_escape_string($dbc, trim($_POST['password']))); 
     /* query DB */ 
     $query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'"; 
     $result = mysqli_query($dbc, $query) or die ("There was an error with your mySQL query:" . mysqli_error($dbc)); 

     if(mysqli_num_rows($result)==1) { /* Check that matching row exists in users for login */ 

       $row = mysqli_fetch_array($result); 
       $_SESSION['id'] = $row['id']; // set the session info 
       $_SESSION['type'] = $row['type']; 
       $_SESSION['name'] = $row['f_name']; 

       setcookie('id', $row['id'], time()+ (60*60*24*30)); 
       setcookie('type', $row['type'], time()+ (60*60*24*30)); 
       setcookie('name', $row['f_name'], time()+ (60*60*24*30)); 
       $home_url = '/'; //redirect not working with $_SERVER variable in WAMP. keep an eye for the future 
       header('Location: '.$home_url); 
       mysqli_close($dbc); 

     } else { /* if no match in database ask to resubmit login info or register */?> 
       <script type="text/javascript" src="../js/jquery.validate.js"></script> 
         <script> 
          $(document).ready(function(){ 
            $("#login_form").validate(); 
           }); 
         </script> 
         <div class="span-24 colborder"> 
          <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> 
           <label class="error">Your email and/or password are incorrect. </label><br /> 
           <label class="error">If you haven't already signed up, feel free to <a href="user_registration.php" > register</a> </label><br /> 
           <input type="text" name="email" id="email" value="" class="email required" placeholder="[email protected]"/> <br /> 
           <input type="password" name="password" id="password" class="required" value="" /> <br /> 
           <input type="submit" name="submit" value="Login" /> 
          </form> 
         </div> 

    <?php 


     }/* end conditional to check $rows array for username pw match */ 
    } /* end conditional to check that form isn't blank */ 
    else { /* If form is blank ask to resubmit or register */?> 
         <script type="text/javascript" src="../js/jquery.validate.js"></script> 
         <script> 
          $(document).ready(function(){ 
            $("#login_form").validate(); 
           }); 
         </script> 
     <div class="span-24 colborder"> 
      <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> 
       <label class="error">You must enter your email and password if you wish to continue.</label><br /> 
       <input type="text" name="email" id="email" value="" class="email required" placeholder="[email protected]"/> <br /> 
       <input type="password" name="password" id="password" class="required" value="" /> <br /> 
       <input type="submit" name="submit" value="Login" /> 
      </form> 
     </div> 

    <?php 

    } // end else to resubmit in case of blank form 
    } /* end check if form has been submitted */ else{ /* prompt for login if page visited but login form not submitted */ ?> 
     <script type="text/javascript" src="../js/jquery.validate.js"></script> 
         <script> 
          $(document).ready(function(){ 
            $("#login_form").validate(); 
           }); 
         </script> 
     <div class="span-24 colborder"> 
      <form id="login_form" action="<?php $_SERVER['PHP_SELF'] ?>" method="post"> 
       <label class="error">You must be logged in to do that!.</label><br /> 
       <input type="text" name="email" id="email" value="" class="email required" placeholder="[email protected]"/> <br /> 
       <input type="password" name="password" id="password" class="required" value="" /> <br /> 
       <input type="submit" name="submit" value="Login" /> 
      </form> 
     </div> 

                    <?php 

                    } 

    } /* end check if cookie isset */ else { //redirect if cookies & session is already set 
                $home_url = '/'; 
                header('Location: '.$home_url); 
                 } 


?> 


<?php include('partials/_footer.php'); ?> 

:

  <?php 
     if(isset($_SESSION['type']) && $_SESSION['type'] == "rnr") { //start special runner menu options 
    ?> 
      <ul class="main_menu"> 
      <li id="how_it_works" class="main_menu"><a class="main_menu" href="/user/bid_task.php">Bid on a task</a></li> 
      <li id="our_runners" class="main_menu"><a class="main_menu" href="/our_runners.php">Our Runners</a></li> 
      <li id="login" class="main_menu"><a class="main_menu" href="/user/my_account.php">My account</a></li> 
      <li id="register" class="main_menu"><a class="main_menu" href="/user/logout.php">Logout</a></li> 
     </ul>  


    <?php } /* end runner menu */ ?> 

미리 감사드립니다.

+0

누구나 쿠키에'name = admin'을 (를) 지정할 수 있으며 관리자가 될 수 있습니까? – zerkms

+0

아니요 이름은 단순히 이름입니다. – user1589198

+0

확인. 임의의 ID를 지정하는 것은 어떻습니까? 내 쿠키에'id = 1'을 지정하면 어떨까요? – zerkms

답변

0

헤더 파일은 로그인 스크립트에서 setcookie 함수가 호출되기 전에 포함됩니다. 내가 보는 것을 바탕으로, 쿠키가이 조건 검사를 할 때 설정되지 않은 :

if(isset($_COOKIE['id']) && isset($_COOKIE['name']) && isset($_COOKIE['type'])) 

그리고

때문에 그것은 결코 조건 문 내부에 들어 가지 않고 다음 행은 헤더 파일에 실행되지 않는 :

$_SESSION['id'] = $_COOKIE['id']; 
$_SESSION['name'] = $_COOKIE['name']; 
$_SESSION['type'] = $_COOKIE['type']; 
+0

헤더 파일 include를 제거하고 로그인 스크립트를 실행했지만 여전히 작동하지 않았습니다. – user1589198

+0

음 ... 잘 제거하면 도움이되지 않을 것입니다. 세션을 어딘가에 설정해야합니다. 문제는 쿠키에서 세션을 설정하고 세션 전에 쿠키를 설정하지 않는다는 것입니다. 그것은 작동하지 않습니다 .. – raidenace

+0

내 이전, 코멘트를 무시하시기 바랍니다 나는 코드를 잘못 읽었습니다 * sheepish grin * – raidenace

관련 문제