PHP/MySQL authenticatie met sessions

Door R. Hebing, 22 jaar geleden, 4.735x bekeken

Een kant en klaar systeem voor PHP/MySQL authenticatie met sessions. Het script genereert een aantal bestanden, add_user.php, inc_login.php en login_verify.php. Met add_user.php kun je gebruikers toevoegen (verwijderen moet je maar vanuit de database doen). Zet bovenaan iedere te beveiligen pagina deze code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php require('inc_login.php'); ?>


Gewoon het voorbeeldscript downloaden, op je server kwakken en het script uitvoeren. Ik heb de code ook hieronder neergezet omdat code een verplicht veld is.

Voorbeeld: http://www.its-learning.com/data/423/1618/install.php

Gesponsorde koppelingen

PHP script bestanden

  1. phpmysql-authenticatie-met-sessions

 

Er zijn 12 reacties op 'Onbekend'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
 
0 +1 -0 -1
Je vergeet bij regel 32 dat je er ?> hebt staan denk ik, want zo werkt het script niet


22 jaar geleden
 
0 +1 -0 -1
Even tussen en plempen.
Verder is het mij op dit moment onduidelijk wat het precies is, wat ik er mee kan, en waar die lange teken reeksen voor zijn.
 
0 +1 -0 -1
Voor degenen die het script willen zien:

SQL:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE TABLE USERS (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20),
    password VARCHAR(20)
);


Zelf gegevens van database invullen:
config.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$host
='';
$username='';
$password='';
$db='';
?>


login_veify.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

require("config.php");

if(!empty($_POST['username']))
{

  session_start();
  mysql_connect($host,$username,$password);
  mysql_select_db($db);
  $query=mysql_query("SELECT USER_ID FROM USERS WHERE USERNAME='".$_POST['username']."' AND PASSWORD='".md5($_POST['password'])."';");
  if(mysql_num_rows($query)>0)    
  {

    $row=mysql_fetch_assoc($query);
    $_SESSION['user_id']=$row['USER_ID'];
    header("Location: ".$_SERVER['PHP_SELF']);
    //zoals je ziet wordt alleen user_id opgeslagen. Dit uit veiligheidsoverwegingen omdat je met een relatief eenvoudige handeling bij sessie data kan komen (ook wel eens voorgekomen in de ELO van mijn school).
  }    
  else
  echo("Toegang geweigerd voor ".$_POST['username']." met wachtwoord ".$_POST['password']);  
}


?>

<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?> ">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Inloggen">
</form>


inc_login.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

//Opslaan als inc_login.php
session_start();

if(!isset($_SESSION['user_id']))
{

  echo("U hebt geen toegang tot ".$_SERVER['PHP_SELF']." omdat u niet bent aangemeld");
  echo("<hr>");
  require("login_verify.php");
  exit();
}


?>


add_user.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

require("config.php");

if(!empty($_POST))
{

    mysql_connect($host,$username,$password) or die(mysql_error());
    mysql_select_db($db) or die(mysql_error());
    if($_POST['password']!=$_POST['second'])
    die("De opgegeven wachtwoorden komen niet overeen");
    mysql_query("INSERT INTO users (username,password) VALUES ('".$_POST['username']."','".md5($_POST['password'])."');") or die(mysql_error());
    mysql_close();
}


?>

<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<table>
<tr>
    <td>Gebruikersnaam</td><td><input name="username" type="text" /></td>
    <td>Wachtwoord</td><td><input name="password" type="password" /></td>
    <td>Bevestigen</td><td><input name="second" type="password" /></td>
</tr>
</table>
</form>
R. Hebing
R. Hebing
22 jaar geleden
 
0 +1 -0 -1
Dit script is een soort installer. Als je het script op je server kwakt en het uitvoert, dan worden uit die base64 reeksen de benodigde bestanden gegenereerd en wordt de door jou ingevulde MySQL configuratie opgeslagen onder conf.php. Ik dacht dat het wel duidelijk was.
 
0 +1 -0 -1
@R. Hebing:
Zou je dat dan duidelijk in de uitleg willen zetten? Dus bijv dit als uitleg:
Quote:
Een kant en klaar systeem voor PHP/MySQL authenticatie met sessions.
Zet bovenaan iedere te beveiligen pagina deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php require('inc_login.php'); ?>


Dan het volgende script naar je server uploaden, en 1 maal uitvoeren om de benodigde pagina's te genereren, zodat het inlogsysteem werkt.
Legolas
Legolas
22 jaar geleden
 
0 +1 -0 -1
MySQL injection...
Rene Koot
Rene Koot
22 jaar geleden
 
0 +1 -0 -1
Moet er in het add_user.php form geen bevestigen knop. Volgens mij kun je nu niets invoegen?
PHP Newbie
PHP Newbie
22 jaar geleden
 
0 +1 -0 -1
waarom zijn die bovenste variabelen gecodeerd?

verify:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

require("config.php");

if(!empty($_POST['username']))
{

  session_start();
  mysql_connect($host,$username,$password);
  mysql_select_db($db);
  $query=mysql_query("SELECT USER_ID FROM USERS WHERE USERNAME='".$_POST['username']."' AND PASSWORD='".md5($_POST['password'])."';");
  if(mysql_num_rows($query)>0)    
  {

    $row=mysql_fetch_assoc($query);
    $_SESSION['user_id']=$row['USER_ID'];
    header("Location: ".$_SERVER['PHP_SELF']);
    //zoals je ziet wordt alleen user_id opgeslagen. Dit uit veiligheidsoverwegingen omdat je met een relatief eenvoudige handeling bij sessie data kan komen (ook wel eens voorgekomen in de ELO van mijn school).
  }    
  else
  echo("Toegang geweigerd voor ".$_POST['username']." met wachtwoord ".$_POST['password']);  
}


?>

<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?> ">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Inloggen">
</form>


....
....
Legolas
Legolas
22 jaar geleden
 
0 +1 -0 -1
scroll iets omhoog en je ziet het
PHP Newbie
PHP Newbie
22 jaar geleden
 
0 +1 -0 -1
legolas, doel je op dit:

Dit script is een soort installer. Als je het script op je server kwakt en het uitvoert, dan worden uit die base64 reeksen de benodigde bestanden gegenereerd en wordt de door jou ingevulde MySQL configuratie opgeslagen onder conf.php. Ik dacht dat het wel duidelijk was.

Dan snap ik nog niet waarom het gecodeerd is
Legolas
Legolas
22 jaar geleden
 
0 +1 -0 -1
ja, dat. de keuze voor codering is hier handig, ivm problemen met string handling, al zou ik nooit een dergelijke installer willen gebruiken.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
T H
T H
22 jaar geleden
 
0 +1 -0 -1
Mischien is het handig om in ad_user.php er een button bij te zetten om hem te laten maken ofzo, dus een [maak] :D

en nog iets, bij maak_user.php doe je ook het wachtwoord in md5! toppie :P maare.... das past niet in de Tabel, daar heb je een max van 20 tekens... en bij het inloggen doe je het wachtwoord niet in md5... :D dus...
- of databases anders instellen en login aanpassen
- of wachtwoord niet in md5

verder moet ik hem nog testen :D

MVG, tim

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. phpmysql-authenticatie-met-sessions

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.