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

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

Является ли это чем-то сложным или это потому, что я ноб, что я не могу понять это?

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

Ответ 1

Логины не слишком сложны, но есть некоторые специфические элементы, которые необходимы практически для всех процессов входа.

Сначала убедитесь, что вы включили переменную сеанса на всех страницах, для которых требуется знание состояния входа в систему, поставив это в начале этих страниц:

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 area, " . $_SESSION['username'] . "!";
} else {
    echo "Please log in first to see this page.";
}

Это основные компоненты. Если вам нужна помощь в аспекте SQL, в сети есть учебники - много.

Ответ 2

В 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 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!"
}

Ответ 3

Любая страница, на которой вы хотите выполнить сеансовые проверки, должна начинаться с:

session_start();

Оттуда вы проверите свой массив сеансов для переменной, указывающей, что они вошли в систему:

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

Запись в них - это не что иное, как установка этого значения:

$_SESSION["loggedIn"] = true;

Ответ 4

Почти все ответы на этой странице основаны на проверке существования переменной сеанса для проверки логина пользователя. Это абсолютно нормально, но важно учитывать, что состояние сеанса PHP не уникально для вашего приложения, если на одном голом железе несколько виртуальных хостов/сайтов.

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

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

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

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

Ответ 5

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";

    }
}

Ответ 6

Смотрите этот script для регистрации. Просто и очень легко понять.

<?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

Ответ 7

Необходимость во всех страницах перед проверкой текущих сеансов

session_start();

Проверьте, если $_SESSION [ "loggedIn" ] (не) true - если нет, переадресовывайте их на страницу входа.

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

}

Ответ 8

Вы можете сделать сеанс и разместить его:

//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;

Ответ 9

<?php
session_start();
if(!isset($_SESSION["login"]) && $SESSION["login"] =="OK")){
header("Location: index.php");
exit;
?>