web-dev-qa-db-ja.com

ユーザーがPHPでログインしているかどうかを確認するにはどうすればよいですか?

私はphpにはかなり慣れていないので、セッションを使用して、特定のページにアクセスするための承認を得るために、ユーザーがWebサイトにログインしているかどうかを確認する方法を見つけようとしています。

これは複雑なものですか、それとも私が理解できない初心者だからですか?

助けてくれてありがとう!

43
Andrew

ログインはそれほど複雑ではありませんが、ほとんどすべてのログインプロセスに必要な特定の部分があります。

まず、ログイン状態の知識を必要とするすべてのページでセッション変数を有効にします。これらのページの先頭にこれを配置します。

_session_start();
_

次に、ユーザーがログインフォームを介してユーザー名とパスワードを送信すると、通常、MySQLなどのユーザー名とパスワード情報を含むデータベースにクエリを実行して、ユーザー名とパスワードを確認します。データベースが一致を返す場合、セッション変数を設定してその事実を含めることができます。他の情報を含めることもできます。

_if (match_found_in_database()) {
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $username; // $username coming from the form, such as $_POST['username']
                                       // something like this is optional, of course
}
_

次に、ログイン状態に依存するページで、次を入力します(session_start()を忘れないでください):

_if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
    echo "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
    echo "Please log in first to see this page.";
}
_

これらは基本的なコンポーネントです。 SQLの側面に関するヘルプが必要な場合は、ネット上にたくさんのチュートリアルがあります。

89
Ben Torell

Login.htmlで:

<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  <title>Login Form</title>
</head>
<body>
  <section class="container">
    <div class="login">
      <h1>Login</h1>
      <form method="post" action="login.php">
        <p><input type="text" name="username" value="" placeholder="Username"></p>
        <p><input type="password" name="password" value="" placeholder="Password"></p>

        <p class="submit"><input type="submit" name="commit" value="Login"></p>
      </form>
    </div>
</body>
</html>

Login.phpで:

<?php

$Host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$Host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$username=$_POST['username']; 
$password=$_POST['password']; 

// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $username and $password, table row must be 1 row
if($count==1){
    session_start();
    $_SESSION['loggedin'] = true;
    $_SESSION['username'] = $username;
}

Member.phpで:

session_start();
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
    echo "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
    echo "Please log in first to see this page.";
}

MYSQLの場合:

CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default '',
`password` varchar(65) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

Register.htmlで:

<html>
<head>
<title>Sign-Up</title>
</head>
<body id="body-color">
<div id="Sign-Up">
<fieldset style="width:30%"><legend>Registration Form</legend>
<table border="0">
<form method="POST" action="register.php">
<tr>
<td>UserName</td><td> <input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td><td> <input type="password" name="password"></td>
</tr>
<tr>
<td><input id="button" type="submit" name="submit" value="Sign-Up"></td>
</tr>
</form>
</table>
</fieldset>
</div>
</body>
</html>

Register.phpで:

<?php

define('DB_Host', '');
define('DB_NAME', '');
define('DB_USER','');
define('DB_PASSWORD','');

$con=mysql_connect(DB_Host,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " .     mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());



$userName = $_POST['username'];
$password =  $_POST['password'];
$query = "INSERT INTO members (username,password) VALUES ('$userName','$password')";
$data = mysql_query ($query)or die(mysql_error());
if($data)
{
echo "YOUR REGISTRATION IS COMPLETED...";
}
else
{
echo "Unknown Error!"
}
19
Troy Benson

セッションチェックを実行するページは、次から開始する必要があります。

session_start();

そこから、セッションアレイをチェックして、ログインしていることを示す変数を探します。

if (!$_SESSION["loggedIn"]) redirect_to_login();

それらにログインすることは、その値を設定することです。

$_SESSION["loggedIn"] = true;
12
Sampson

このページのほとんどすべての回答は、セッション変数の存在を確認してユーザーのログインを検証することに依存しています。これはまったく問題ありませんが、同じベアメタル上に複数の仮想ホスト/サイトがある場合、PHPセッション状態はアプリケーションに固有ではないことを考慮することが重要です。

Webサーバー上に2つのPHPアプリケーションがあり、両方とも 'isLoggedIn'と呼ばれるセッション変数のブールフラグでユーザーのログインステータスをチェックすると、ユーザーはアプリケーションの1つにログインしてから資格情報なしで自動的に秒へのアクセスを取得します。

商用の共有ホスティングの最も恐竜でさえ、仮想ホストが同じPHP環境を共有することはできません。これは、複数の顧客サイト(もう)で発生する可能性がありますが、自分の環境で検討してください。

非常に簡単な解決策は、ブールフラグではなく、アプリを識別するセッション変数を使用することです。例:$ SESSION ["isLoggedInToExample.com"]

出典:私はペネトレーションテスターであり、どのようにすべきでないかについて多くの経験を持っています。

11
hiburn8
else if (isset($_GET['actie']) && $_GET['actie']== "aanmelden"){

    $username= $_POST['username'];
    $password= md5($_POST['password']);
    $query = "SELECT password FROM tbl WHERE username = '$username'";
    $result= mysql_query($query);
    $row= mysql_fetch_array($result);

    if($password == $row['password']){
            session_start();
            $_SESSION['logged in'] = true;
            echo "Logged in";

    }
}
0
moriarty5

あなたはセッションをしてそれを置くことができます:

//start session
session_start(); 

//check do the person logged in
if($_SESSION['username']==NULL){
    //haven't log in
    echo "You haven't log in";
}else{
    //Logged in
    echo "Successfully log in!";
}

注:$_SESSION['username'] = $login_input_username;を含むフォームを作成する必要があります

0
Richard Kok

現在のセッションを確認する前にすべてのページで必要

session_start();

$_SESSION["loggedIn"](is not)true-そうでない場合、ログインページにリダイレクトします。

    if($_SESSION["loggedIn"] != true){
       echo 'not logged in';
       header("Location: login.php");
       exit;
    }
0
Jeacovy Gayle

登録については、このスクリプトを参照してください。シンプルでわかりやすい。

<?php

define('DB_Host', 'Your Host[Could be localhost or also a website]');
define('DB_NAME', 'databasename');
define('DB_USERNAME', 'Username[In many cases root but some sites offer MySql Page where the username might be different]');
define('DB_PASSWORD', 'whatever you keep[if username is root then 99% password is blank]');


$link = mysql_connect(DB_Host, DB_USERNAME, DB_PASSWORD);

if (!$link) {
    die('Could not connect line 9');
}

$DB_SELECT = mysql_select_db(DB_NAME, $link);

if (!$DB_SELECT) {
    die('Could not connect line 15');
}

$valueone = $_POST['name'];
$valuetwo = $_POST['last_name'];
$valuethree = $_POST['email'];
$valuefour = $_POST['password'];
$valuefive = $_POST['age'];

$sqlone = "INSERT INTO user (name, last_name, email, password, age) VALUES ('$valueone','$valuetwo','$valuethree','$valuefour','$valuefive')";


if (!mysql_query($sqlone)) {
    die('Could not connect name line 33');
}


mysql_close();
?>

PhpMyAdminを使用して、すべてのデータベースを作成してください。とても使いやすいツールです。こちらで見つけることができます: http://www.phpmyadmin.net/home_page/index.php

0
user3627194