2016-04-23 13 views
0

私はあなたの前の助けのために皆さんに敬意を表します。 誰もがこの非常に単純なエラーを想像してしまいますが、それは数時間私を落としてしまいました。セッション変数を設定し、別のページに呼び出す

ログインページから、ログインユーザー名とパスワードをデータベース値と比較(認証)します。一致した場合は、それらをセッション変数に格納し、ダッシュボードページにリダイレクトします。

リダイレクトの前に、変数が設定されているかどうかを確認するためにprint_r($ _SESSION)を使用しました。出力はTRUE(セッションが設定されています)でした。

しかし、ダッシュボードでセッション変数を呼び出すと、session!setが返されました。 次のコードを確認してください。

[ログインページ]

<?php 

session_start(); 

require_once('../data/conString_mysqli.php'); 
$uNameErr = $pWordErr = ""; 
$uName = $pWord = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    //************************************* 
    if (!empty($_POST["username"])) { 
     $uName = test_input($_POST["username"]); 
    } else { 
     $uNameErr = "Email is required!"; 
     // check if e-mail address is well-formed 
     if (!filter_var($uName, FILTER_VALIDATE_EMAIL)) { 
      $uNameErr = "Invalid email format"; 
     } 
    } 
    if (!empty($_POST["password"])) { 
     $pWord = test_input($_POST["password"]); 
     $hashed = md5($pWord); 
    } else { 
     $pWord1Err = "Password is Required!"; 
     if ($pWord < 8) { 
      $pWordErr = "Invalid Password."; 
     } 
    } 

}//end if... IS_POST 
    function test_input($data) { 
    //require connection file 

     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data);  
     return $data; 
    }//end function 
?> 

<?php 

    if (!empty($uName) && !empty($pWord)){ 
     $hashed = md5($pWord); 

     $read_data = mysqli_query($connect, "SELECT * FROM service_providers WHERE activated='1' AND ppword ='".$hashed."' AND pemail='".$uName."'") or die(mysqli_error()); 

     $count = mysqli_num_rows($read_data); 
     if($count >= 1){/*echo '<script type="text/javascript">alert("Records Found!");</script>';*/ 

      //store session variables 
      $row = mysqli_fetch_array($read_data); 
      $_SESSION[ 'serv_pid' ]  = $row[ 'serv_pid' ]; 
      $_SESSION[ 'providerName' ] = $row[ 'pname' ]; 

      echo '<script type="text/javascript">alert("Session Name: '.$_SESSION['providerName']." - Session ID: ". $_SESSION['serv_pid'].'");window.location="../dashboard/";</script>'; 

/*echo "<pre>"; 
print_r ($_SESSION); 
echo "</pre>"; 
*/  
     }else{echo '<script type="text/javascript">alert("Invalid Login Details");window.location="../login/";</script>'; 

     } 
    } 
?> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" style="margin-top: 1.5em;"> 
<div class="form-group"> 
<div class="input-group"> 
<input type="text" name="username" class="form-control text-center" placeholder="username (your email)" value="<?php echo $uName;?>"><span class="error"> <?php echo $uNameErr;?></span> 
<span class="input-group-addon btn btn-warning" style="background: #f0ad4e; color: #fff;"> 
<span class="glyphicon glyphicon-user" style="margin: 0;"></span> 
</span> 
</div> 
</div> 
<div class="form-group"> 
<div class="input-group"> 
<input type="password" name="password" class="form-control text-center" placeholder="password" value="<?php echo $pWord;?>"><span class="error"> <?php echo $pWordErr;?></span> 
<span class="input-group-addon btn btn-warning" style="background: #f0ad4e; color: #fff;"> 
<span class="glyphicon glyphicon-lock" style="margin: 0;"></span> 
</span> 
</div> 
</div> 

<p style="font-size: 16px !important;"><a style="color: #fff; text-decoration: none; margin-top: 2em; display: block;" href="../sign-up/">Don't have an Account? <u>Get one!</u></a> <span style="color:#FF0000; font-weight:bold; text-decoration:underline;"><em><a href="forgot_pass.php" title="Click here to get your password">Forgot your password?</a></em></span></p> 
<div class="col-md-6 col-md-offset-3 text-center" style="margin-top: 5px;"> 
<button type="submit" name="login" class="btn btn-warning btn-lg btn-custom" style="margin-right: 1em; border-width: 3px;">LOGIN</button> 
<a href="../sign-up/" class="btn btn-warning" style="background: none !important; border: 3px solid #fff;">SIGN UP</a> 
</div> 
<div class="clearfix"></div> 
</form> 

[ダッシュボードページ]

<?php 
session_start(); 
echo "<pre>"; 
print_r ($_SESSION); 
echo "</pre>"; 


/* 
if (!isset($_SESSION['serv_pid'])){// or !isset($_SESSION['providerName'])){ 
    die('<script type="text/javascript">alert("You do not have permission to access beyond the previous page.");window.location="../login/";</script>'); 
}else{ 
    $serv_pid = $_SESSION['serv_pid']; 
    $pName = $_SESSION['providerName']; 
}*/ 
?> 

ログインページから、ますprint_rによって返される結果は次のとおり

アレイ ( [serv_pid] = > 1 [providerName] =>いいえ名前 )

ログインページにアクセスすると、セッションが破棄されたようです。 ますprint_rによって返された結果は次のとおりです。

アレイ ( )

任意のアイデアで私を助けてください。 ありがとうございます。

+0

ユーザーがログインしてからダッシュボードにリダイレクトすると、セッションが設定されます。右?だから、もし彼がすでにログインしているのであれば、再びログインページに来るのはなぜですか?彼はログアウトした、つまりセッションが破壊された場合にのみ、ログインページに戻ることができます。正確にあなたが問題に直面しているかどうかは分かりません。 –

+0

ダッシュボードページで、サーバーはそのユーザー用に作成されたセッションがあるかどうかを確認します。 FALSEの場合、ユーザーはログインページに戻ります。問題は次のとおりです。ダッシュボードページでは、サーバーはセッションを検出しません。一方、セッションがありました。ログインページの後にセッションが破棄されるようなものです。コード化されて破壊されるまで、セッションをどのように維持できますか? – Eyo

答えて

0

PHPでセッションを開始するとセッションクッキーが設定されます。セッションクッキーは、php括弧の外にある最初の文字を印刷するとき、または最初の文字をechoに印刷するときにブラウザに送信されます。 問題は、ユーザーをダッシュ​​ボードページにリダイレクトしようとするときだと思います。あなたは別のページにリダイレクトするスクリプトをブラウザに書いてセッションを設定していますが、その間サーバーはページの処理を停止しません。

echo "<script>..."をPHPのheader("Location: dashboard.php")に置き換えてから、exit(0);命令に置き換えてください。 最初のページは、ブラウザにdashboard.phpページ(またはそのページが何であれ)にリダイレクトするように指示します.2番目のページは、ページの実行を停止するようにブラウザに指示します。

また、?><?phpの間のブランク行を削除してください。その行は実際には空白の文字であっても、クッキーと一緒にブラウザにヘッダーを送信します。

+0

あなたの修正をありがとう。しかし、

0

ランディングページと送信ページにsession_start()関数が余分にありました。各session_start()はもう一方をキャンセルし、変数はリンク先ページに到達する前に破棄されました。

しかし、ページ全体を一度に1行ずつ削除して再作成する必要がありました。それで、今働いています。

私は実際に私のコーディングの助けになる示唆的な反応を寄せてくれたMarco Todiscoに感謝したいと思います。

関連する問題