2017-02-02 18 views
2

ユーザーが登録またはログインしたときにメッセージを表示するログインフォームがあります。ログインページが最初に開き、ログインが成功したらindex.phpを表示できます。誰かが/index.phpに直接アクセスしても、login.phpに認証されるように指示する必要があります。私は他の人々のコードのいくつかの例を試しましたが、私はページを取得してユーザーを認証することができません。インデックスの前に強制的なログインページ

マイLogin.phpコード:

<?php 
session_start(); 
require_once('connect.php'); 
if(isset($_POST) & !empty($_POST)){ 
$username = mysqli_real_escape_string($connection, $_POST['username']); 
$password = md5($_POST['password']); 

$sql = "SELECT * FROM `login` WHERE username='$username' AND password='$password'"; 
$result = mysqli_query($connection, $sql); 
$count = mysqli_num_rows($result); 
if($count == 1){ 
    $_SESSION['username'] = $username; 
}else{ 
    $fmsg = "Invalid Username/Password"; 
} 
} 
if(isset($_SESSION['username'])){ 
$smsg = "User already logged in"; 
} 


?> 
<!DOCTYPE html> 
<html> 
<head> 
<title>User Login in PHP & MySQL</title> 
<!-- Latest compiled and minified CSS --> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" > 

<!-- Latest compiled and minified JavaScript --> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script> 

<link rel="stylesheet" type="text/css" href="styles.css"> 
</head> 
<body> 
<div class="container"> 
    <?php if(isset($smsg)){ ?><div class="alert alert-success" role="alert"> <?php echo $smsg; ?> </div><?php } ?> 
    <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?> 
    <form class="form-signin" method="POST"> 
    <h2 class="form-signin-heading">Please Register</h2> 
    <div class="input-group"> 
     <input type="text" name="username" class="form-control" placeholder="Username" required> 
    </div> 
    <label for="inputPassword" class="sr-only">Password</label> 
    <input type="password" name="password" id="inputPassword" class="form-control" placeholde r="Password" required> 
    <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button> 
    <a class="btn btn-lg btn-primary btn-block" href="register.php">Register</a> 
    </form> 
</div> 
</body> 
</html> 
+1

** ' md5() 'を使ってパスワードをハッシュします**非常に安全です。 PHPの['password_hash()'](http://php.net/manual/en/function.password-hash.php)と['password_verify()'](http://php.net/manual/en /function.password-verify.php)。 5未満のPHPバージョンを実行している場合。5(私はあなたがそうでないことを願っています)、[password_compat library](https://github.com/ircmaxell/password_compat)を使って同じ機能を得ることができます。 –

答えて

0

あなたは文は、ユーザーがログインされているかどうかを確認することができます。 ユーザーがログインしていない場合は、login.phpにリダイレクトすることができます ユーザーがログインしている場合は、インデックスページを表示させることができます。そうするために は、コード例を以下に示します....

<?php 
session_start(); 
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) { 
    $welcomeMessage = "Welcome to the member's area, " . $_SESSION['username'] . "!"; 
} else { 
    header('Location: login.php'); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<title>Index page</title> 
</head> 
<body> 
<? 
    if(!empty($welcomeMessage)) echo $welcomeMessage; 
?> 
Index page 
</body> 
</html> 
+0

私はこのコードをどこに置くのですか? – RedZ

+0

@ J.Hofウェルカムメッセージの後にコード全体を置くことができます。 〜のように..... echo "メンバーのエリアへようこそ"、。 $ _SESSION ['username']。 "!"; ここ以外のコードは – Shujaat

+0

ですが、これをlogin.phpまたはindex.phpページに置いていますか? – RedZ

0

私が最初に開くために、ログインページを希望し、ログインが成功した後、その後のindex.phpを示すことができます。

さてあなたは、この行を追加します.htaccessファイルを作成することができます。誰かが訪れたときに

DirectoryIndex login.phpサイトは

をlogin.phpに行きます、その後login.php

上の最初のチェックであればそのユーザーは

のでlogin.php

すでにLOGGEDINされていません
<?php 
    session_start(); 
    require_once('connect.php'); 
if(isset($_SESSION['username'])){ 
$smsg = "User already logged in"; 
header("location:index.php"); // send to index if logged in 
}else{ 

    // the code you have in your question here 


} 
?> 

また、誰かが/index.phpに直接アクセスして認証するにはlogin.phpに直接指示する必要があります。あなたは次のようになります(私による)

のindex.php

<?php 

    session_start(); 

    if(isset($_SESSION['username'])):?> 



    Your html content 

<?php 

    else: 

    header("location:login.php");//send them to login 

    endif; 

?> 
0

絶対最も簡単な方法は、ログインしてそのセットが続けば、セッションが設定されているかどうか確認するか、それらを送り返す必要があるだろう、そして、

<?php 
session_start(); 
if (empty($_SESSION['username'])) { 
    // The username session key does not exist or it's empty. 
    header('location: /login.php'); 
    exit; 
} 

をあなたが(あなたのindex.phpを含む)を保護するすべてのページの最上部には、単に追加します:次の内容のauth.phpと呼ばれる新しいファイルを作成します

<?php 
require __DIR__ . '/auth.php'; 
?> 

// Continue with your HTML here 

if/elseステートメント内にサイトを構築する必要はありません。

注:これは、すべてのページは、ルートフォルダにあることを前提としています。サブフォルダ内に保護したい他のページがある場合は、__DIR__は、あなたが書いたファイルの絶対パスを与えるので、正しいパスをauth.phpに追加する必要があります。

関連する問題