Я довольно новичок в php, и я пытаюсь выяснить, как использовать сеансы для проверки и проверить, зарегистрирован ли пользователь на веб-сайте, чтобы у них было разрешение на доступ к определенным страницам.
Является ли это чем-то сложным или это потому, что я ноб, что я не могу понять это?
Спасибо за помощь!
Логины не слишком сложны, но есть некоторые конкретные части, которые необходимы практически для всех процессов входа в систему.
Во-первых, убедитесь, что вы включили переменную сеанса на всех страницах, для которых требуется знание состояния входа в систему, поставив это в начале этих страниц:
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, в сети есть учебные пособия.
В 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!" }
Любая страница, на которой вы хотите выполнить сеансовые проверки, должна начинаться с:
session_start();
Оттуда вы проверяете свой массив сеансов для переменной, указывающей, что они вошли в систему:
if (!$_SESSION["loggedIn"]) redirect_to_login();
Вход в них – это не что иное, как установка этого значения:
$_SESSION["loggedIn"] = true;
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"; } }
См. Этот скрипт для регистрации. Просто и очень легко понять.
<?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
<?php session_start(); if(!isset($_SESSION["login"]) && $SESSION["login"] =="OK")){ header("Location: index.php"); exit; ?>
Необходимость на всех страницах перед проверкой текущих сеансов
session_start();
Проверьте, если $ _SESSION ["loggedIn"] ( is not ) true – если нет, перенаправляйте их на страницу входа.
if($_SESSION["loggedIn"] != true){ //echo 'not logged in'; header("Location: login.php"); exit;
}