Как проверить, вошел ли пользователь в php? - PullRequest
42 голосов
/ 09 октября 2009

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

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

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

Ответы [ 9 ]

88 голосов
/ 09 октября 2009

Вход в систему не слишком сложен, но есть некоторые специфические части, которые нужны почти всем процессам входа.

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

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

19 голосов
/ 08 февраля 2014

В 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!"
}
12 голосов
/ 09 октября 2009

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

session_start();

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

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

Регистрация их - не более чем установка этого значения:

$_SESSION["loggedIn"] = true;
9 голосов
/ 22 февраля 2018

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

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

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

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

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

0 голосов
/ 25 июля 2018

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

//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 голосов
/ 07 августа 2017

Требуется на всех страницах, прежде чем проверять текущие сеансы

session_start();

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

    if($_SESSION["loggedIn"] != true){
       echo 'not logged in';
       header("Location: login.php");
       exit;
    }
0 голосов
/ 23 июня 2015
<?php
session_start();
if(!isset($_SESSION["login"]) && $SESSION["login"] =="OK")){
header("Location: index.php");
exit;
?>
0 голосов
/ 31 мая 2014

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

<?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 голосов
/ 01 декабря 2013
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";

    }
}
...