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

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

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

Απάντηση
Άβαταρ μέλους
boliziner
Δημοσιεύσεις: 18
Εγγραφή: 07 Αύγ 2008 11:53

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

Δημοσίευση από boliziner » 15 Οκτ 2008 16:14

Αυτός ο έλεγχος μπορεί να γίνει με to session που έχεις ανοιχτό όταν κάνεις log in.

Το script αυτό δεν είναι ασφαλές και κινδυνεύεις με sql injection πρέπει να προσθέσεις κώδικα.

http://en.wikibooks.org/wiki/Programmin ... _Injection

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

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

Δημοσίευση από billt » 15 Οκτ 2008 16:41

Το script από "απλό user login ..." αρχίζει να μεγαλώνει :)

Τα sql injections έχουν συζητηθεί πολλές φορές στο forum και δεν είναι στο σκοπό του βοηθήματος, αλλά περισσότερο η εξοικίωση με τη χρήση των sessions. Αnyway χωρίς να επεκταθώ ιδιαίτερα πέρασε όλες τις μεταβλητές POST ή SESSION από τη συνάρτηση mysql_real_escape_string ($value) που υπάρχει από την PHP5.
antoo έγραψε:Πολύ καλό το βοήθημά σου bilt. Θα ήθελα να σε ρωτήσω κάτι. Έχω κάνει register, login και θέλω να τελειώσω με το logout. Πάνω δεξιά στη σελίδα έχω βάλει να εμφανίζεται αποσύνδεση και δίπλα το όνομα του συνδεδεμένου. Θέλω όμως αυτό να εμφανίζεται σε όλες τις σελίδες μέχρι να γίνει αποσύνδεση. Ποιος είναι περίπου αυτός ο έλεγχος ;
Αν έχεις σε όλες τις σελίδες στην κορυφή του κώδικα

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

<?php session_start&#40;&#41;; ?> 
μπορείς να χρησιμοποιήσεις τις μεταβλητες SESSION με το username. Για την αποσύνδεση απλά κάνε λινκ στο logout.php
Και επίσης σίγουρα όταν έχει γίνει login, δε θα πρέπει να μπορείς πλέον να κάνεις login. Ξέρεις περίπου πώς μπορώ να τα διορθώσω αυτά; Ευχαριστώ εκ των προτέρων για το χρόνο σου.
Μπορείς στην κορυφή της login.php να βάλεις

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

<? 
session_start&#40;&#41;; 
if&#40;session_is_registered&#40;authenticated&#41;&#41;&#123; 
header&#40;"location&#58;index.php"&#41;; 
&#125; 
?>
που θα στέλνει το χρήστη στην index.php αν έχει κάνει ήδη Login.

bicco
Δημοσιεύσεις: 4
Εγγραφή: 10 Δεκ 2008 07:18

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

Δημοσίευση από bicco » 10 Δεκ 2008 07:37

Ευχαριστώ πολύ για τον οδηγό!

Μπορείς να μου εξηγήσεις λίγο πιο αναλυτικά τι κάνει η παρακάτω γραμμή και τι ακριβώς λέει στον υπολογιστή?

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

session_register&#40;"authenticated"&#41;;


Γιατί ας πούμε δε χρησιμοποιήσαμε μια απλή μεταβλητή για αυτή τη δουλειά?
Τι ακριβώς κάνει αυτό το session_register??

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

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

Δημοσίευση από korgr » 10 Δεκ 2008 11:02

Αν χρησιμοποιήσεις απλή μεταβλητή, αυτή θα είναι διαθέσιμη μόνο κατά την εκτέλεση του php κώδικα της συγκεκριμένης σελίδας.
Με την session variable θα είναι διαθέσιμη η τιμή της και σε όλες τις υπόλοιπες σελίδες του site μετά το login (σαν να λέμε μεταφέρεται η μεταβλητή από σελίδα σε σελίδα).

bicco
Δημοσιεύσεις: 4
Εγγραφή: 10 Δεκ 2008 07:18

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

Δημοσίευση από bicco » 10 Δεκ 2008 13:40

Δηλαδή εννοείς ότι η "session_register" είναι session variable?

Όσο για τις λέξεις register και authenticated, είναι τυχαίες ή πρόκειται για συγκεκριμένα statements για αυτή τη δουλειά??

Επιπλέον, ενώ ακολούθησα όλες τις οδηγίες τούτου του οδηγού, παρόλα αυτά, τη σελίδα που θέλω να "προστατέψω", δε την καταφέρνω και πάντα μα πάντα μου διαβάζεται το περιεχόμενο της, παρόλο που έχω βάλει στην αρχή το PHP..!!


καμια ιδέα?

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

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

Δημοσίευση από korgr » 16 Δεκ 2008 19:04

Η session_register είναι statement της php και ορίζει μια session variable (αυτή που έιναι ως όρισμα μέσα στις παρενθέσεις).
Ένας άλλος τρόπος να ορίσεις μια session μεταβλητή είναι για παράδειγμα μετά από συμπλήρωση login φόρμας:

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

session_start&#40;&#41;;
$username=$_POST&#91;"username"&#93;;
$password=$_POST&#91;"password"&#93;;
// check username & password και αν ισχύουν &#123;
$_SESSION&#91;"username"&#93;=$username; // κράτα το username σε session var για να την χρησιμοποιείς σε μηνύματα προς τον registered user...
$_SESSION&#91;"authenticated"&#93;=true;
&#125;else&#123;
$_SESSION&#91;"username"&#93;="";
$_SESSION&#91;"authenticated"&#93;=false;
&#125;

PaXaRoTi
Δημοσιεύσεις: 9
Εγγραφή: 04 Σεπ 2008 14:01

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

Δημοσίευση από PaXaRoTi » 21 Δεκ 2008 15:10

Egine to register alla !

Graftika 2 fores me to idio name kai pass pos ginete auto ?

Kai den ginete na gino login ... enw iparxoune ta stixia den ginete login.

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

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

Δημοσίευση από billt » 21 Δεκ 2008 22:27

Ama den kaneis elegxo an iparxei to username .... ginetai :)

To password einai md5?

Ikki
Δημοσιεύσεις: 1
Εγγραφή: 19 Απρ 2009 18:41

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

Δημοσίευση από Ikki » 19 Απρ 2009 18:45

χρησιμοποιοώ το web page maker και θέλω να δημιουργήσω forum όπως αυτό.. είμαι τέλείως άσχετος. δεν χρησιμοποιώ το adobe dreamweaver 8 cs4 επειδή δεν κάθεται στον υπολογιστή μου. καμιά βοήθεια για το forum???

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

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

Δημοσίευση από mariosal » 09 Ιουν 2009 13:57

Θα πείραζε να φτιάξω μία "πιο γρήγορη" έκδοση, να κάνω validate τα αρχεία και να την postάρω;

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

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

Δημοσίευση από ThyClub » 09 Ιουν 2009 14:03

Καθόλου.

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

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

Δημοσίευση από mariosal » 09 Ιουν 2009 14:25

Κάθισα και έφτιαξα μία γρηγορότερη και πιο απλή έκδοση του ήδη υπάρχον script. Κάνει την ίδια ακριβώς δουλειά και πιστεύω ότι τώρα είναι πιο εύκολο έτσι όπως το έκανα. Δεν το έχω testάρει άλλα πρέπει να δουλεύει σωστά.

Εκτελούμε το ακόλουθο SQL query σε μία MySQL βάση δεδομένων

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

CREATE TABLE table_name &#40;
id int UNSIGNED AUTO_INCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL,
PRIMARY KEY &#40; id &#41;
&#41;;
Έπειτα φτιάχνουμε ένα .php αρχείο στο οποίο θα βάλουμε τον ακόλουθο κώδικα για την εγγραφή

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Register</title>
</head>

<body>
<?php
session_start&#40;&#41;; 
if &#40;session_is_registered&#40;'authenticated'&#41;&#41; 
   die&#40;'Έχετε εγγραφεί ήδη</body></html>'&#41;;
mysql_connect&#40;'localhost', 'databe_username', 'database_userpassword'&#41;or die&#40;mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;'database_name'&#41; or die&#40;mysql_error&#40;&#41;&#41;;
if &#40;!empty&#40;$_POST&#91;'username'&#93;&#41; && !empty&#40;md5&#40;$_POST&#91;'password'&#93;&#41;&#41;&#41; &#123;
	mysql_query&#40;"INSERT INTO table_name &#40;username, password&#41; VALUES &#40;'".mysql_real_escape_string&#40;htmlspecialchars&#40;$_POST&#91;'username'&#93;&#41;&#41;."', '".mysql_real_escape_string&#40;&#40;md5&#40;$_POST&#91;'password'&#93;&#41;&#41;."'&#41;"&#41;;
	die&#40;'Ευχαριστούμε για την εγγραφή σας</body></html>'&#41;;
&#125;
?>
<form action="<?=&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;;?>" method="post">
Username&#58; <input name="username" type="text" size="40" />
<br>
Password&#58; <input name="password" type="password" size="40" />
<br>
<input name="submit" type="submit" value="register" />
</form>
</body>
</html>
Έπειτα φτιάχνουμε ένα .php αρχείο στο οποίο θα βάλουμε τον ακόλουθο κώδικα για την είσοδο

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>

<body>
<?php
if &#40;session_is_registered&#40;'authenticated'&#41;&#41; 
   die&#40;'Έχετε συνδεθεί ήδη ήδη</body></html>'&#41;;
mysql_connect&#40;'localhost', 'databe_username', 'database_userpassword'&#41;or die&#40;mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;'database_name'&#41; or die&#40;mysql_error&#40;&#41;&#41;;
if &#40;!empty&#40;$_POST&#91;'username'&#93;&#41; && !empty&#40;md5&#40;$_POST&#91;'password'&#93;&#41;&#41;&#41; &#123;
	$rows = mysql_num_rows&#40;mysql_query&#40;"SELECT username, password FROM table_name WHERE username='".mysql_real_escape_string&#40;$_POST&#91;'username'&#93;&#41;."' AND password='".mysql_real_escape_string&#40;md5&#40;$_POST&#91;'password'&#93;&#41;&#41;."'"&#41;&#41;;
	if &#40;$rows==1&#41; &#123;
		session_register&#40;'authenticated'&#41;;
		die&#40;'Επιτυχής Login</body></html>'&#41;;
	&#125;
	else
		echo&#40;'Ανεπιτυχές Login, δοκιμάστε πάλι'&#41;;
&#125;
?>
<form action="<?=&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;;?>" method="post">
Username&#58; <input name="username" type="text" size="40" />
<br>
Password&#58; <input name="password" type="password" size="40" />
<br>
<input name="submit" type="submit" value="Login" />
</form>
</body>
</html>
Για να κάνει κάποιος logout φτιάχνουμε ένα αρχείο .php και βάζουμε τον ακόλουθο κώδικα

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

<?php
session_start&#40;&#41;;
session_destroy&#40;&#41;;
echo&#40;'Log Out'&#41;;
?>
Εάν θέλετε να επιτρέπετε είσοδο σε μία σελίδα μόνο για όσους έχουν πραγματοποιήσει είσοδο γράφουμε τον ακόλουθο κώδικα

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

<?php
session_start&#40;&#41;;
if &#40;!session_is_registered&#40;'authenticated'&#41;&#41;
	header&#40;'Location&#58; name_of_file_which_users_login.php'&#41;;
?>
Τελευταία επεξεργασία από το μέλος mariosal την 09 Ιουν 2009 14:49, έχει επεξεργασθεί 8 φορές συνολικά.

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

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

Δημοσίευση από ThyClub » 09 Ιουν 2009 14:29

1 παρατήρηση:

Ποτέ μα ΠΟΤΕ μην εμπιστεύεστε το user input.

Δλδ ποτέ μην κάνετε αυτό:

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

if &#40;!empty&#40;$_POST&#91;'username'&#93;&#41; && !empty&#40;md5&#40;$_POST&#91;'password'&#93;&#41;&#41;&#41; &#123;
   mysql_query&#40;"INSERT INTO table_name &#40;username, password&#41; VALUES &#40;'".$_POST&#91;'username'&#93;."', '".md5&#40;$_POST&#91;'password'&#93;&#41;."'&#41;"&#41;; 

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

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

Δημοσίευση από mariosal » 09 Ιουν 2009 14:30

Έχεις δίκιο κάτσε να κάνω μία αλλαγή

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

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

Δημοσίευση από mariosal » 09 Ιουν 2009 14:39

Τώρα καλύτερα;

Απάντηση

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

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

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