Autorius Tema: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)  (Skaityta 1184 kartus)

Neprisijungęs index

  • Naujokas
  • *
  • Įrašai: 85
  • Karma: +1/-0
  • PHP Moksleivis
    • Žiūrėti profilį
Taigi katik sutvarkiau login.php failą ir turėtų nebemesti errorų. Šioje temoje bus: login.php , config.php , prisijungusių narių funkcijos, ir daugiau.
Truputį vėliau papildysiu šia temą ir įdėsiu: registraciją (su gerai užkoduotu slaptažodžiu, apsauga nuo sql injekcijų), prisijungusių narių panelę.

Taigi login.php:
<?php
require_once "config.php";
# tikriname ar buvo paspaustas submit mygtukas
if ( isset($_POST['login']) ) {
# Uzkoduojam ivesta slaptazodi taip kaip buvo uzkoduotas registruojantis, siuo atveju md5 koduote, bet jeigu nori galima kita koduote panaudoti

$password md5($_POST['password']);
# Isescapeíname visa POST, kad niekas nedarytu SQL injectionu
foreach ($_POST as $key => $value) {
// ČIA RAŠOME INCLUDE INJ.PHP FUNKCIJĄ JEIGU NORITE APSAUGOTI PRISIJUNGIMĄ NUO SQL INJEKCIJŲ
}
# Sukuriame SQL uzklausa kuria panaudosime patikrinimui ar egzistuoja toks vartotojas ir ar teisingai ivesti duomenys
$query mysql_query("
SELECT 
`uid`,`username`,`password` 
FROM 
`users` 
WHERE 
`username` = '" 
$_POST['username'] . "' 
  AND 
`password` = '" 
$password "' 
"
) or die (mysql_error());
#tikriname ar teisingai ivesti duomenys
if ( mysql_num_rows($query) < ) {
#duomenys ivesti neteisingai, tai irasome pranesima , kad duomenys yra neteisingi
$pranesimas "Blogi prisijungimo duomenys";
} else {
# duomenys buvo teisingi

$fetch mysql_fetch_array($query);
#suteikiame vartotojui sessijos ID
mysql_query("UPDATE `users` SET `uid` = '" session_id() . "' WHERE `id` = '" $fetch['id'] . "' LIMIT 1 ") or die (mysql_error());
# Sukuriame sesijos kintamuosius
# Parodo kad vartotojas yra prisijunges
$_SESSION['LOGED'] = TRUE;
# Sis kintamasis turi visa vartotojo informacija
$_SESSION['USER'] = $fetch;
# Irasome pranesima, kad prisijungimas buvo sekmingas
$pranesimas "Prisijungta!";
$_SESSION['pranesimas'] = $pranesimas;
# Nukreipiame i pradini puslapi
header("Location:index.php");
exit;
}
# Irasome klaidos pranesima
$_SESSION['pranesimas'] = $pranesimas;
}

?>

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DEMO</title>
</head>
<body>
<?php
# Isvedame klaidos/neklaidos pranesimus
 echo @$_SESSION['pranesimas'] ;unset($_SESSION['pranesimas']);?>

<h3>Login</h3>
<!-- Sukuriame forma, kuri yra nukreipiama i ta pati faila -->
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<p>Vardas<input type="text" name="username" /></p>
<p>Slaptazodis <input type="password" name="password" /></p>
<p><input type="submit" name="login" /></p>
</form>
</body>
</html>

config.php:

<?php
# Pradedam sesija
session_start();
#prisijungiam prie Mysql
$sql_connection mysql_connect("localhost" "root" "");
#pasirenkam Duomenu baze
mysql_select_db("main",$sql_connection);
?>


Apsauga nuo injekcijų inj.php(naudoti su komanda include nes nekišau į prisijungimą)

<?php
function protect($i) {
$i trim($i);
$i stripslashes($i);
$i htmlentities($iENT_QUOTES);
$i mysql_real_escape_string($i);

return $i;
}
?>


Prisijungimo apsaugas UPDATINSIU vėliau, taip pat pateiksiu ir registracija.php failą.
O dabar funkcijos pasitelkus sesijas.

<?php
if(isset($_SESSION['LOGED'])){ //Užkoduojame eilutę, kad nemestų define errorų.
$iUSER $_SESSION['LOGED']; //Sutrumpiname kad nereiktų vedinėti sesijų, o užtektų tiesiog parašyti iUSER
}
if(
$iUSER TRUE) { //Aš vartotojas = tiesa, norit kito varianto rašykite FALSE
echo"manualai.lt"//Jeigu aš vartotojas rašo manualai.lt
}else{
echo 
"google.lt"//Jeigu ne, rašo google.lt
}

?>


iUSER, inj.php kūriau pats be pagalbos. login.php kūrimui naudojausi youtube pamoka.
Bėje įmesiu ir pamoką kaip sukurti mysql lenteles registracijai. :)

--Taigi įdedu ir gerai be klaidų veikiančios registracijos kodą. Aišku apsaugas padaryti patingėjau. (supraskit - pagrindai, visa ko reikia pasidarysit patys) --

registracija.php

<?php
//tikrinama ar ivydyta forma
if(isset($_POST['username']))
{
//priskiriami kintamieji
$user $_POST['username'];
$pass $_POST['password'];
$pass2 $_POST['password2'];
//tikrina ar nera tusciu lauku
if($user<>"" AND $pass<>"" AND $pass2<>"")
{
//tikrina ar vienodi slaptazodziai
if($pass==$pass2)
{
if(
strlen($pass)>=4)
{
$con mysql_connect("localhost""root""");
if(!
$con)
{
die(
"could not connect:".mysql_error());
}
mysql_select_db("main"$con);
$pass md5($pass);
if(
mysql_num_rows(mysql_query("select * from users where username = '$user'")))
{
echo 
"vartotojas uzimtas";
}else{
mysql_query("insert into users (uid, username, password) VALUES ('', '$user', '$pass')");
echo 
"Sekminga uzsiregistravote.";
}
}else{
echo 
"Slaptazodis per trumpas";
}
}else{
echo 
"Slaptazodziai nesutampa";
}
}else{
echo 
"Ne visi laukai uzpildyti";
}
}
?>

<form method='POST'>
Vardas <input type='text' name='username'><br>
Slaptazodis <input type='password' name='password'><br>
Pakartokite slaptazodi <input type='password' name='password2'><br>
<br>
<input type='submit' value='Registruotis'>
</form>

O dabar kuriame duomenų bazės lenteles!
Taigi: atsidarome phpmyadmin >> pasirenkame DB kurioje norime kurti lenteles >> Viršuje spaudžiame SQL >>
į SQL rašome:
CREATE TABLE users (id smallint(5) NOT NULL auto_increment, uid varchar(50) NOT NULL, username varchar(50) NOT NULL, passwordl varchar(50) NOT NULL, UNIQUE id (id), PRIMARY KEY (id))

Šias lenteles taip pat galite pritaikyti prie mano registracijos formos kodo. Sėkmės ir laukite kol atnaujinsiu šią temą. :)
« Paskutinį kartą keitė: 2012-11-01 22:29:42 pm sukūrė index »
Don't teach to learn, - learn to teach.

Neprisijungęs Lukas Liesis

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7232
  • Karma: +220/-15
    • Žiūrėti profilį
    • mano CV
Ats: Veikiantis login.php su paaiškinimu
« Atsakymas #1 Įrašytas: 2012-10-31 17:09:04 pm »
aciu, kad dedi tas pamokas :)
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Manualai.lt Facebooke
serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Neprisijungęs index

  • Naujokas
  • *
  • Įrašai: 85
  • Karma: +1/-0
  • PHP Moksleivis
    • Žiūrėti profilį
Ats: Veikiantis login.php su paaiškinimu
« Atsakymas #2 Įrašytas: 2012-10-31 17:56:48 pm »
Nėra už ką, juk atsimenu kai pats nieko nemokėjau ir visur ieškojau bet niekas taip detaliai nemokino, kad suprasčiau. :)
Don't teach to learn, - learn to teach.

Neprisijungęs bendzaminas

  • Naujokas
  • *
  • Įrašai: 185
  • Karma: +11/-0
    • Žiūrėti profilį
Ats: Veikiantis login.php su paaiškinimu
« Atsakymas #3 Įrašytas: 2012-11-01 16:59:49 pm »
Turiu vieną klausimą, kam saugai tą session_id() duombazėje ir darai papildomą užklausą UPDATE, jei pačiam user'io idenfikavimui jis nenaudojamas?

Manualai.lt Forumas

Ats: Veikiantis login.php su paaiškinimu
« Atsakymas #3 Įrašytas: 2012-11-01 16:59:49 pm »

Neprisijungęs Nazist

  • Naujokas
  • *
  • Įrašai: 2
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #4 Įrašytas: 2013-11-27 18:30:50 pm »
O bus prisijungusių narių panelė ?

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 916
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: Veikiantis login.php su paaiškinimu
« Atsakymas #5 Įrašytas: 2013-11-28 00:46:47 am »
Turiu vieną klausimą, kam saugai tą session_id() duombazėje ir darai papildomą užklausą UPDATE, jei pačiam user'io idenfikavimui jis nenaudojamas?

Manau duomenu bazeje saugo tam, kad po to pagal veikiancias sesijas butu matoma prisijunge nariai
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Neprisijungęs Nazist

  • Naujokas
  • *
  • Įrašai: 2
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #6 Įrašytas: 2013-11-28 16:22:32 pm »
Norėčiau paklausti kaip padaryti kad rodytu prisijungusius narius ?

Neprisijungęs Kalnų karalius

  • Naujokas
  • *
  • Įrašai: 71
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #7 Įrašytas: 2013-11-29 13:27:32 pm »
Viską gali rasti google'je jeigu bent šiek tiek moki anglų kalbą. Taigi, kad rodytų prisijungusius narius turi registruoti juos duomenų bazėje, kiekvieną kartą jiems atnaujinus svetainę kartu atnaujinti ir datą prisijungusiųjų duomenų bazėje. Pasirenki tam tikrą laiko tarpą, po kurio jis šalinamas iš duomenų bazės, t.y. iš online sąrašo, pvz 5 ar 10 minučių.

Neprisijungęs justinas

  • Naujokas
  • *
  • Įrašai: 148
  • Karma: +11/-3
    • Žiūrėti profilį
Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #8 Įrašytas: 2013-12-05 17:36:15 pm »
ext/mysql naudojimas
SQL injekcijos visur, kur įmanoma
MD5 slaptažodžiams hešuoti

Gal žinot, kur pardavinėja stiprias virves?

Neprisijungęs ganjabest

  • Dalyvis
  • **
  • Įrašai: 916
  • Karma: +34/-1
  • Povilas Stankevičius
    • Žiūrėti profilį
Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #9 Įrašytas: 2013-12-10 18:32:49 pm »
ext/mysql naudojimas
SQL injekcijos visur, kur įmanoma
MD5 slaptažodžiams hešuoti

Gal žinot, kur pardavinėja stiprias virves?


Jeigu tokį "PROPĄ" vaidini, tai gal geriau paaiškink ar bent link'us numesk, o nerašyk tam, kad "ale aš kietesnis, nes žinau" ;) Aš tikiu, kad kas moka tas supranta, ką tu turėjai omenyje. Bet nereiškia, kad visi čia skaitantys ir rašantys žmonės pagauna apie ką tu čia kalbi, rašydamas tas užuominas. Kaip tu pirmą kartą rašei "echo", nemanau, kad žinojai kaip geriau heshuot slaptažodžius ar kad vietoj paprastų mysql funkcijų naudoti PDO ar mysqli bibliotekas. Tas pats kaip pasakyčiau "kam išvis rašyti koda nuo nulio, nes yra pilna tų TVS ar framework'ų, iš kurių gali daryti ką tik nori".

O autoriui paaiškinant apie ką čia kalba eina:

Pvz. mysql funkcijos yra pasenusios ir pripažintos nesaugiomis, todėl šiai dienai geriau naudoti tarkim mysqli . Dar geriau naudoti pvz šitą mysqli biblioteka http://www.meekro.com/ . Naudojant taisyklingai, tau jau nereikia sukti galvos kaip papildomai apsisaugoti nuo injekcijų.

Slaptažodžio hešavimui geriau naudoti: http://php.net/manual/en/function.crypt.php  md5 - taip pat pasenęs reikalas. O parodytame pavyzdyje pliusas yra ir tame, kad  yra "blowfish". Tiesiog kažkas dekoduodamas tavo hašus su md5 per sekundę patikrins ne viena reikšmę, o su crypt paprasčiau sakant gali padaryti taip kad "užsiknistų" tikrinant net vieną reikšmę.
Visi žmonės kaip žmonės - tik aš vienas kaip dievas!

Manualai.lt Forumas

Ats: Viskas ko reikia TVS pradziai (prisijungimas, registracija ir t.t.)
« Atsakymas #9 Įrašytas: 2013-12-10 18:32:49 pm »