2017-04-24 18 views
1

私は単純なログイン/ログアウトスクリプトを持っており、 'success.php'という特定のページに直接アクセスすることはできません。私はそれがどこかのタイプミスか、セッションが適切に動作していないかどうかわかりません。PHPへのアクセスが拒否されています

のindex.php

<?php 

// Start the session 
session_start(); 

// Defines username and password. Retrieve however you like, 
$username = "user"; 
$password = "pw"; 

// Error message 
$error = ""; 

// Checks to see if the user is already logged in. If so, refirect to correct page. 
if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == true) { 
    $error = "success"; 
    header('Location: success.php'); 
} 

// Checks to see if the username and password have been entered. 
// If so and are equal to the username and password defined above, log them in. 
if (isset($_POST['username']) && isset($_POST['password'])) { 
    if ($_POST['username'] == $username && $_POST['password'] == $password) { 
     $_SESSION['loggedIn'] = true; 
     setcookie('userName', $_POST['username'], time()+3600); // Expiring after 2 hours 
     header('Location: success.php'); 
    } else { 
     $_SESSION['loggedIn'] = false; 
     $error = "<p style='color:red;font-size:11px;'>Invalid username and/or password!</p>"; 
    } 
} 

<div class="col-md-3 col-lg-2 col-sm-6 col-xs-6"> 
    <div class="form-login"> 
     <form method="post" action="index.php"> 
     <h4 style="color: #FFF;">S-Files</h4> 
     <input type="text" name="username" class="form-control" placeholder="username" maxlength="40" autofocus required /> 
     <br /> 
     <input id="password" type="password" name="password" class="form-control" placeholder="password" maxlength="15" required /> 
     <br /> 
     <div class="wrapper"> 
      <span class="group-btn"> 
       <button type="submit" name="submit" class="btn btn-primary btn-md">login <i class="fa fa-sign-in" ></i></button> 
      </span> 
     </div> 
     </form> 
     <!-- Output error message if any --> 
    <?php echo $error; ?> 
    </div> 
</div> 

はSuccess.php

<?php 
// Start the session 
session_start(); 
// ob_start(); 

// Check to see if actually logged in. If not, redirect to login page 
if (!isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == false && !isset($_COOKIE['userName'])) 
{ 
    header('Location: index.php'); 
} 

Logout.phpが

<?php 
session_start(); 
$_SESSION['loggedIn'] = false; 
unset($_SESSION); 

// Delete cookie 
if (isset($_COOKIE['userName'])) 
{ 
unset($_COOKIE['userName']); 
    setcookie('userName', '', time() - 3600); // empty value and old 
timestamp 
} 

// Unset all of the session variables. 
$_SESSION = array(); 

// If it's desired to kill the session, also delete the session cookie. 
// Note: This will destroy the session, and not just the session data! 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
     ); 
} 

// Finally, destroy the session. 
session_destroy(); 
header("Location: index.php"); 

だから私の問題は、ユーザーがURL /success.phpを入力し、ログインせずにそこにあるコンテンツを視聴することができるということです、私は彼らがのindex.phpにリダイレクトされるようにしたいです認証されていない場合はです。私は間違って何をしていますか?

+0

認証されていない場合は** index.php **にリダイレクトされますが、認証されている場合は同じページにリダイレクトされます。私はあなたの条件が正しく構成されていないと思う。 –

+0

認証された場合、同じページにリダイレクトするにはどうすればよいですか?あなたはページから一度だけリダイレクトできると思った。 – Marst

答えて

0

あなたの状態があなたの代わりにセッションチェックのためORANDを使用している原因、あなたが間combinateすることはできません」、間違っている& & 『SESSIONは存在しませ必要がある』 『SESSIONをFALSEに設定する必要があります』 FALSEに設定されたセッションは、!isset($_SESSION['loggedIn])の場合はfalseを返します。したがって、条件全体がfalseになり、ユーザーはリダイレクトされません。 だから、あなたのコードそのように変更される可能性があります:

session_start(); 

    if(isset($_SESSION['loggedIn']) 
    { 
     if($_SESSION['loggedIn'] != true) 
     { 
      header("location:index.php"); 
     } 
    } 
    else 
    { 
     header("location:index.php"); 
    } 
+0

正しい資格情報でログインしようとすると、**/success.php **のURLに直接アクセスしようとすると、これで500エラーが発生しました。 500エラーは、私が信じているPHPコードで何か間違っていることを意味しますか? – Marst

+0

私はエラーを修正しましたが、それは空白のためだと思っていますが、正確には特定できません。しかし、私はまだ直接訪問**/success.php **を介して行くことができます.. – Marst

0

を私はエラー報告をオンにし、私は500エラーを得た: "警告:ヘッダー情報を変更することはできません - すでにによって送られたヘッダを...ライン3に... blabla ... "私は3行目のコードを削除し、それを上記の行に貼り付けていました。最小の問題は、常に最大です..私はそれが自動的にいくつかの奇妙な目に見えないシンボルをその行や何かに追加して何かを持っていると思います。 this stack-thread私は束を助けた!

また、すべての回答に感謝します。

関連する問題