2009-10-09 12 views
38

Jestem całkiem nowy dla php i próbuję wymyślić, jak używać sesji, aby sprawdzić i sprawdzić, czy użytkownik jest zalogowany na stronie internetowej, tak aby mieli uprawnienia do dostępu do konkretnych stron.Jak sprawdzić, czy użytkownik jest zalogowany w php?

Czy jest to coś, co jest skomplikowane, czy też dlatego, że jestem noobem, którego nie mogę rozwiązać?

Dzięki za pomoc!

+1

Czy próbowałeś szukać? Na tym jest mnóstwo turronów i pytano mnie w kółko ... – Jakub

+4

tak, ale szukałem kogoś, kto wytłumaczyłby to w fasionie, że mogę to zrozumieć, dzięki! – Andrew

Odpowiedz

12

Każda strona chcesz wykonać sesji kontrole potrzeb zacząć:

session_start(); 

Stamtąd sprawdzić swoją tablicę sesji dla zmiennej wskazującej są zalogowany:

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

Zalogowanie ich to nic innego jak ustawienie tej wartości:

$_SESSION["loggedIn"] = true; 
78

Logowanie nie jest zbyt skomplikowane d, ale są pewne konkretne elementy, których potrzebują prawie wszystkie procesy logowania.

Po pierwsze, upewnij się, że umożliwienie zmiennej sesji na wszystkich stronach, które wymagają wiedzy o zalogowanych statusu umieszczając to na początku tych stron:

session_start(); 

Następnie, gdy użytkownik wysyła swoją nazwę użytkownika i hasło za pomocą formularza logowania, zazwyczaj sprawdzasz swoją nazwę użytkownika i hasło, wysyłając zapytanie do bazy danych zawierającej nazwę użytkownika i hasło, takie jak MySQL. Jeśli baza danych zwróci dopasowanie, możesz ustawić zmienną sesji tak, aby zawierała ten fakt. Warto również zawierać inne informacje:

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 
} 

następnie na stronie, która zależy od zalogowanego w stanie umieścić następujące (nie zapomnij 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."; 
} 

te są podstawowe składniki. Jeśli potrzebujesz pomocy z aspektem SQL, istnieją tutoriale-a-mnóstwo w sieci.

+2

Brak nawiasu w wywołaniu isset: if (isset ($ _ SESSION ['loggedin']) && $ _SESSION ['loggedin'] == true) ... –

+0

Whoops, thanks. Naprawiony. –

+0

dzięki za wyjaśnienie tego. Zastanawiam się, czy można ograniczyć folder zamiast strony? więc każda strona, którą mam w tym folderze jest ograniczona, chyba że jesteś zalogowany? – Ali

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

    } 
} 
18

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

W 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; 
} 

W 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."; 
} 

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

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

W 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!" 
} 
+1

Co to wszystko jest? Czy próbujesz odpowiedzieć lub zadać inne pytanie? –

+5

mysql_ * w 2014 roku? –

+0

[plik mysql_real_escape_string jest zdeponowany] (http://php.net/manual/en/function.mysql-real-escape-string.php). [Zamiast tego użyj PDO] (http://php.net/manual/en/ref.pdo-mysql.php). – Halfacht

1

Zobacz ten skrypt rejestru. Prosty i bardzo łatwy do zrozumienia.

<?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(); 
?> 

Upewnij się, że tworzysz wszystkie rzeczy z bazy danych za pomocą phpMyAdmina. Jest to bardzo proste narzędzie do pracy. Można go znaleźć tutaj: http://www.phpmyadmin.net/home_page/index.php

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

Potrzeba na wszystkich stronach Przed sprawdzeniem dla bieżącej sesji

session_start(); 

sprawdzić czy $ _SESSION [ "loggedin"] (nie jest) prawdą - jeśli nie , przekieruj ich na stronę logowania.

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

}

1

Po pierwsze, moje przeprosiny, doceniam, że odpowiedzi nie powinny być komentarze do innych odpowiedzi ... ale ) Nie mam reputację do dodawania komentarzy, a b) jest to bardzo ważne ...

Prawie wszystkie odpowiedzi na tej stronie polegają na sprawdzeniu istnienia zmiennej sesji w celu sprawdzenia loginu użytkownika. To jest absolutnie w porządku, ale ważne jest, aby wziąć pod uwagę, że stan sesji PHP nie jest unikalny dla twojej aplikacji, jeśli istnieje wiele wirtualnych hostów/witryn na tym samym gołym metalu.

Jeśli masz dwie aplikacje PHP na serwerze internetowym, zarówno sprawdzając status logowania użytkownika z flagą boolowską w zmiennej sesji o nazwie "isLoggedIn", to użytkownik może zalogować się do jednej z aplikacji, a następnie automagicznie uzyskać dostęp do drugi bez poświadczeń.

Podejrzewam, że nawet większość dinozaurów komercyjnego hostingu dzielonego nie pozwoli wirtualnym hostom dzielić tego samego środowiska PHP w taki sposób, aby mogło to zdarzyć się na wielu stronach klientów (już), ale jest czymś do rozważenia we własnym środowisku .

Bardzo prostym rozwiązaniem jest użycie zmiennej sesji, która identyfikuje aplikację zamiast flagi boolowskiej. np. $ SESSION ["isLoggedInToExample.com"].

Źródło: Jestem testerem penetracji, z dużym doświadczeniem, w jaki sposób nie powinieneś robić rzeczy.

Powiązane problemy