私はあなたの前の助けのために皆さんに敬意を表します。 誰もがこの非常に単純なエラーを想像してしまいますが、それは数時間私を落としてしまいました。セッション変数を設定し、別のページに呼び出す
ログインページから、ログインユーザー名とパスワードをデータベース値と比較(認証)します。一致した場合は、それらをセッション変数に格納し、ダッシュボードページにリダイレクトします。
リダイレクトの前に、変数が設定されているかどうかを確認するために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によって返された結果は次のとおりです。
アレイ ( )
任意のアイデアで私を助けてください。 ありがとうございます。
ユーザーがログインしてからダッシュボードにリダイレクトすると、セッションが設定されます。右?だから、もし彼がすでにログインしているのであれば、再びログインページに来るのはなぜですか?彼はログアウトした、つまりセッションが破壊された場合にのみ、ログインページに戻ることができます。正確にあなたが問題に直面しているかどうかは分かりません。 –
ダッシュボードページで、サーバーはそのユーザー用に作成されたセッションがあるかどうかを確認します。 FALSEの場合、ユーザーはログインページに戻ります。問題は次のとおりです。ダッシュボードページでは、サーバーはセッションを検出しません。一方、セッションがありました。ログインページの後にセッションが破棄されるようなものです。コード化されて破壊されるまで、セッションをどのように維持できますか? – Eyo