Ένα απλό User Login σε PHP

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: Super-Moderators, WebDev Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 31 Μαρ 2006 19:20

Παρακάτω θα σας δείξω ένα απλό (πολύ απλό ...) σύστημα login για κλειστή περιοχή μελών :

Ανοίγουμε το phpmyadmin και δημιουργούμε τη βάση users. Πάμε να φτιάξουμε τον πίνακα που έχει τα usernames και τα passwords των μελών μας, έστω usertable :

Κώδικας: Επιλογή όλων

CREATE TABLE `usertable` (
`id` INT NOT NULL AUTO_INCREMENT ,
`username` TEXT NOT NULL ,
`password` TEXT NOT NULL ,
PRIMARY KEY ( `id` ) 
);
Το αρχείο (dbconnect.php) που μας συνδέει με τη βάση δεδομένων μας περιέχει :

Κώδικας: Επιλογή όλων

<?php
mysql_connect&#40;"localhost", "root", ""&#41;or die&#40;"cannot connect"&#41;; 
mysql_select_db&#40;"users"&#41;?>
Όπου root και "" θα βάλετε το username και password για τη βάση δεδομένων σας.

Εγγραφή register.php :

Κώδικας: Επιλογή όλων

<?php
include &#40;'dbconnect.php'&#41;;
$username=$_POST&#91;username&#93;;
$password=md5&#40;$_POST&#91;password&#93;&#41;;
if&#40;$username!='' && $password!=''&#41;
&#123; 
$sql="INSERT INTO `usertable` &#40; `id` , `username` , `password` &#41; VALUES &#40;'', '$username', '$password'&#41;";
mysql_query&#40;$sql&#41;;
echo " Ευχαριστούμε για την εγγραφή σας";
&#125;
else &#123;

?>
<html>
<head>
<title>Register</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<form action="register.php" method="post">
<input name="username" type="text" value="username" size="40"><br>
<input name="password" type="password" value="password" size="40"><br>
<input name="submit" type="submit" value="register">
</form>
</body>
</html>
<?php &#125;?>
Όπως βλέπετε το password μπαίνει κρυπτογραφημένο στη βάση με md5

πάμε τώρα στη login.php

Κώδικας: Επιλογή όλων

<?php
include &#40;'dbconnect.php'&#41;;
$username=$_POST&#91;username&#93;;
$password=md5&#40;$_POST&#91;password&#93;&#41;;
if&#40;$username!='' && $password!='' && $error!=1&#41;
&#123; 
$sql="SELECT * FROM usertable WHERE username='$username' AND password='$password'";
$result=mysql_query&#40;$sql&#41;;
$rows=mysql_num_rows&#40;$result&#41;;


	if &#40;$rows==1&#41;&#123;
	session_register&#40;"authenticated"&#41;;
	echo "Επιτυχής Login";
	&#125; else &#123;
	echo "Ανεπιτυχές Login, δοκιμάστε πάλι";
	$error=1; &#125;
&#125;
else &#123;

?>

<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<form action="login.php" method="post">
<input name="username" type="text" value="username" size="40"><br>
<input name="password" type="password" value="password" size="40"><br>
<input name="submit" type="submit" value="Login">
</form>
</body>
</html>
<?php &#125;?>
Για να κάνει κανείς logout έχουμε Logout.php

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;
session_destroy&#40;&#41;;
echo "Log Out";
?>   
Σε όποια σελίδα θέλετε τώρα να επιτρέψετε είσοδος μόνο σε members βάζετε στην αρχή του κώδικα :

Κώδικας: Επιλογή όλων

<? 
session_start&#40;&#41;;
if&#40;!session_is_registered&#40;authenticated&#41;&#41;&#123;
header&#40;"location&#58;login.php"&#41;;
&#125;
?>
Για να το κάνετε πιο εξελιγμένο ακόμα μπορείτε να βάλετε cookies για να κρατάνε το username ,να χαιρετάνε τον χρήση και να μη χρειάζεται να κάνει login κάθε φορά, να ζητάτε κατά την εγγραφή το email και να στέλνετε email με link για activation του λογαριασμού και να προσθέσετε και διάφορα επίπεδα access.

Αυτά την επόμενη φορά :) Αν μου ξέφυγε κάτι sorry, γιατί το έγραψα λίγο στα γρήγορα.
Τελευταία επεξεργασία από το μέλος billt την 31 Μαρ 2006 19:44, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από ThyClub » 31 Μαρ 2006 19:29

Όπως βλέπετε το username μπαίνει κρυπτογραφημένο στη βάση με md5
Να διορθώσω οτι το password μπαίνει κρυπτογραφημένο στο παραπάνω παράδειγμα

Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 31 Μαρ 2006 19:46

Thanks,
το άλλαξα ... δεν υπήρχε περίπτωση να μην γράψω κάτι λάθος :kaloe:

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από Banavas » 01 Απρ 2006 00:52

Συγνώμη αν είναι λίγο άσχετο αλλά θα ήθελα να ρωτήσω αν υπάρχει τρόπος αντιστροφής του md5.
Δηλαδή να διαβάσουμε το καταχωρημένο password αποκωδικοποιόντας την md5 καταχώρηση, ώστε να στείλουμε το password σε κάποιο χρήστη που το ξέχασε.

Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 01 Απρ 2006 01:26

To md5 δεν είναι μονοσήμαντο. Δηλαδή 2 διαφορετικά passwords μπορούν να έχουν το ίδιο hash. Σπάνιο μεν ... γίνεται όμως.

Στην πράξη επιδιώκεις να βρεις μια λέξη με το ίδιο hash , δεν μπορείς να ξέρεις αν είναι το αρχικό password. H μόνη λύση μέχρι τώρα σε αυτό το θέμα είναι με dictionary μέθοδο. Δηλαδή χρησιμοποιείς όλα τα γράμματα, νούμερα και τα συνδυάζεις μεταξύ τους για ένα λογικό μέγεθος λέξεων.

Για κάθε λέξη που δημιουργείται φτιάχνεις το hash και συγκρίνεις μέχρι να βρεις το σωστό. Αυτό μπορεί να πάρει μερικές μέρες ... :)

Τώρα για να γυρίσουμε στο θέμα του members section, όταν κάποιος έχασε τον κωδικό του δημιουργείς ένα νέο προσωρινό (το περιορίζεις πχ για μία μέρα) το εισάγεις στη βάση σε md5 και του το στέλνεις ζητώντας του να το αλλάξει με το login.

soulatsos
Δημοσιεύσεις: 11
Εγγραφή: 25 Οκτ 2005 22:11

Ένα απλό User Login σε PHP

Δημοσίευση από soulatsos » 03 Απρ 2006 16:37

Πολυ καλο βοηθημα το script σου billt.Επειδη ειμαι σχετικα αρχαριος στην PHP (αλλα οχι και ασχετος :D ) θα ηθελα τη βοηθεια σας.Δουλευω στο Dreamweaver 8 και το εχω βαλει να κανει το login απο το server behaviors.Ο κωδικας που μου δημιουργει το dreamweaver στην αρχη ειναι ο παρακατω.
<?php require_once('Connections/conn_pizzadb.php'); ?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['textfield'])) {
$loginUsername=$_POST['textfield'];
$password=$_POST['textfield2'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "afterlogin.php";
$MM_redirectLoginFailed = "loginfail.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_conn_pizzadb, $conn_pizzadb);

$LoginRS__query=sprintf("SELECT username, password FROM users WHERE username='%s' AND password='%s'",
get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password));

$LoginRS = mysql_query($LoginRS__query, $conn_pizzadb) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";

//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
Προσπαθησα να συνδυασω το παραδειγμα σου billt με τον κωδικα μου ετσι ωστε να χρησιμοποιησω το session για να δινω προσβαση μονο σε members μου αλλα δεν το καταφερα.Θα μπορουσε καποιος να μου πει τις αντιστοιχιες των συναρτησεων και τι πρεπει να γραψω σε καθε σελιδα που θελω να ειναι προσβασιμη μονο σε μελη?

Στην ουσια θελω να κανω το αντιστοιχο με αυτο που εγραψε ο billt.
Σε όποια σελίδα θέλετε τώρα να επιτρέψετε είσοδος μόνο σε members βάζετε στην αρχή του κώδικα :


κώδικας:
<?
session_start();
if(!session_is_registered(authenticated)){
header("location:login.php");
}
?>
Οποιος μπορει να βοηθησει...γιατι ειναι για ενα project στη σχολη μου και εχω φρικαρει :)

Ευχαριστω πολυ...

Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 03 Απρ 2006 16:54

Δοκίμασε λίγο αυτό :) :

Κώδικας: Επιλογή όλων

<? 
session_start&#40;&#41;; 
if&#40;!isset&#40;$_SESSION&#91;'MM_Username'&#93;&#41;&#41;&#123; 
header&#40;"location&#58;login.php"&#41;; 
&#125; 
?> 

Άβαταρ μέλους
mpalarinas
Δημοσιεύσεις: 125
Εγγραφή: 28 Οκτ 2005 20:08
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από mpalarinas » 15 Απρ 2006 23:10

Καλησπέρα σας,
αν ένας χρήστης πληκτρολογήσει τα στοιχεία του(username και password) θέλω να μεταφέρετε στο account του όπως και στο freestuff αφού πρώτα γίνει έλεγχος των στοιχείων του.

Μπορείτε να μου πείτε πως γίνεται;
Εικόνα

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από Basilakis » 15 Απρ 2006 23:39

Θα βάλεις όταν κάνει symbit την φόρμα να πηγαίνει σε μία σελίδα px members.php που θα κάνει query με το username του και θα κάνει prin τα στοιχεάι του. Σαφώς σε εκείνη την σελίδα να κάνεις έλεγχο εάν έχει γίνει login!

Άβαταρ μέλους
mpalarinas
Δημοσιεύσεις: 125
Εγγραφή: 28 Οκτ 2005 20:08
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από mpalarinas » 15 Απρ 2006 23:41

Τη ξέρω την διαδικασία αλλά τον κώδικα δεν ξέρω. Αν μπορεί κάποιος να μου δώσει κώδικα
Εικόνα

Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 16 Απρ 2006 01:04

Στη login.php θα κάνεις μια προσθήκη :

Κώδικας: Επιλογή όλων

$sql="SELECT * FROM usertable WHERE username='$username' AND password='$password'"; 
$result=mysql_query&#40;$sql&#41;; 
$rows=mysql_num_rows&#40;$result&#41;; 


   if &#40;$rows==1&#41;&#123; 
   session_register&#40;"authenticated"&#41;; 
  $_SESSION&#91;'username'&#93; = $username;
  echo "Επιτυχής Login"; 
   &#125; else &#123; 
   echo "Ανεπιτυχές Login, δοκιμάστε πάλι"; 
   $error=1; &#125; 
&#125; 
Στη σελίδα members.php που θέλεις να κατευθύνεις το χρήστη θα καλέσεις τη μεταβλητή $username με το

Κώδικας: Επιλογή όλων

<? 
session_start&#40;&#41;; 
if&#40;!session_is_registered&#40;authenticated&#41;&#41;&#123; 
header&#40;"location&#58;login.php"&#41;; 
&#125;
 $username=$_SESSION&#91;'username'&#93;; 
?>
και θα τη βάλεις σε ένα query για να πάρεις τα σχετικά με τον συγκεκριμένο χρήστη.

Άβαταρ μέλους
difylos
Δημοσιεύσεις: 27
Εγγραφή: 17 Ιούλ 2004 02:45
Τοποθεσία: Ηράκλειο
Επικοινωνία:

Ένα απλό User Login σε PHP

Δημοσίευση από difylos » 26 Απρ 2006 18:09

Αν έχει ξεκινήσει ήδη ένα άλλο session τι μπορεί να κάνεις ;

Άβαταρ μέλους
ALKIVIADES
Honorary Member
Δημοσιεύσεις: 1322
Εγγραφή: 07 Απρ 2005 03:39

Ένα απλό User Login σε PHP

Δημοσίευση από ALKIVIADES » 05 Ιουν 2006 13:58

Πως θα μπορούσαμε να αποτρέψουμε έναν δεύτερο χρήστη να επιλέξει να εγγραφεί με ένα είδη υπάρχων username , βάση του παραπάνω script ?
Δήλ. αν υπάρχει το username π.χ "Petros" τότε άν κάποιος προσπαθήσει να εγγραφεί με το ίδιο να μην είναι δυνατόν και έτσι να του δίδεται η επιλογή να δοκιμάσει να εγγραφεί με κάποιο διαφορετικό username που δεν έχει επιλεγεί είδη απο κάποιον άλλον .
περιμένω κάποιο σχετικό παράδειγμα αν είναι δυνατόν .. :)

Άβαταρ μέλους
billt
Δημοσιεύσεις: 1175
Εγγραφή: 20 Φεβ 2004 16:17
Τοποθεσία: Θεσσαλονίκη

Ένα απλό User Login σε PHP

Δημοσίευση από billt » 05 Ιουν 2006 14:33

Στο register.php και πάνω από την INSERT μπορείς να ελέγξεις αν ήδη υπάρχει χρήστης με το ίδιο username στη βάση :

Κώδικας: Επιλογή όλων

$username=$_POST&#91;username&#93;; 
$password=md5&#40;$_POST&#91;password&#93;&#41;; 

......

$sqlcheck="SELECT * FROM usertable WHERE username='$username' "; 
$resultcheck=mysql_query&#40;$sqlcheck&#41;; 
$rowscheck=mysql_num_rows&#40;$resultcheck&#41;; ........

if&#40;$username!='' && $password!='' && $rowscheck==0&#41; 
&#123; 
$sql="INSERT INTO `usertable` &#40; `id` , `username` , `password` &#41; VALUES &#40;'', '$username', '$password'&#41;"; 

............



Άβαταρ μέλους
ALKIVIADES
Honorary Member
Δημοσιεύσεις: 1322
Εγγραφή: 07 Απρ 2005 03:39

Ένα απλό User Login σε PHP

Δημοσίευση από ALKIVIADES » 05 Ιουν 2006 14:45

ευχαριστώ για την γρήγορη απάντηση ;)

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες