it-roy-ru.com

Как проверить, вошел ли пользователь в php?

Я довольно новичок в php, и я пытаюсь выяснить, как использовать сеансы для проверки и проверки входа пользователя на веб-сайт, чтобы у него была авторизация для доступа к определенным страницам. 

Это что-то сложное или потому что я нуб, которого я не могу понять?

Спасибо за помощь! 

40
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, есть множество учебных пособий по сети.

84
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 не является уникальным для вашего приложения, если на одном голом железе несколько виртуальных хостов/сайтов.

Если у вас есть два PHP приложения на веб-сервере, оба проверяют состояние входа пользователя с помощью логического флага в переменной сеанса isLoggedIn, то пользователь может войти в одно из приложений и затем автоматически получить доступ к второй без полномочий.

Я подозреваю, что даже самый динозавр коммерческого совместно используемого хостинга не позволил бы виртуальным хостам использовать одну и ту же среду PHP таким образом, чтобы это могло происходить на сайтах нескольких клиентов (больше), но это нужно учитывать в своих собственных средах. , 

Очень простое решение - использовать переменную сеанса, которая идентифицирует приложение, а не логический флаг. например, $ SESSION ["isLoggedInToExample.com"].

Источник: я - тестер на проникновение, с большим опытом того, как ты не должен делать вещи.

6
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"] ( это не ) 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