Aktivacijski mail

Pozdrav!

Dali bi mi mogli objasniti kako da napravim aktivacijski mail za registraciju, npr. kad se korisnik registruje na stranicu da mu na email pošalje se poruka sa aktivacijskim linkom. Hvala!

Aktivacijski mail sadrži link sa parametrima korisničkog računa kojeg želiš aktivirati.
Stranica koja prihvaća te parametre mora ih verificirati i ako su parametri korektni, radi aktivaciju računa.

npr:
http://moj_web.com/potvrda.php?username=susok&key=e44d49b89c348399e78dc3e92b51fe77

U “key” zakriptiraš podatke tipa ime+ prezime+ lozinka + … da možeš provjeriti autentičnost mejla.

koristi radnom hash. Radi bolje prakse i sigurnosnih razloga. U bazi ti treba još jedno polje za čuvanje hasha. To polje također možeš iskoristiti prilikom izgubljene lozinke i sl.

[quote=“susok”]Pozdrav!

Dali bi mi mogli objasniti kako da napravim aktivacijski mail za registraciju, npr. kad se korisnik registruje na stranicu da mu na email pošalje se poruka sa aktivacijskim linkom. Hvala![/quote]

  1. pokrenes session i korisnikove podatke spremis u session (a ne bazu!)
  2. generiras jedinstveni id sa funkcijom “unique_id” (ili tako nesto)
  3. spremis taj id u $_SESSION
  4. posaljes email sa linkom tako da u query stringu imas taj id (npr.
    http://www.example.com/activation.php?activation_id=iuTe82NAe2238sdAS
    )
    4)u activation.php (ili u kojoj ces vec skripti to procesirati) usporedis to sta imas u get parametru ($_GET[‘activation_id’]) i to sta imas u session-u ($_SESSION[‘activation_id’]). Dakle,

Jako elegantno rjesenje jer se ne moras brinuti oko toga sta sa neaktiviranim korisnicima (nakon isteka session-a se ti podaci obrisu).

[quote=“ivan.skugor”]
Jako elegantno rjesenje jer se ne moras brinuti oko toga sta sa neaktiviranim korisnicima (nakon isteka session-a se ti podaci obrisu).[/quote]

Odlično rješenje.

Joj ja to ništa ne kontam

ja sam login postavio ovako

<?php

if ($_GET["action"]=="prijavise") {

if($_SESSION['prijavljen']== 1) {
} else {
	echo'
<table border="0" cellpadding="5" cellspacing="0">
<form action="?action=prijava" method="POST">
<tr>
<td align="right" class="malitext">Korisničko ime: </td>
<td><input size="30" type="text" name="korisnickoime" /></td>
</tr>
<tr>
<td align="right" class="malitext">Lozinka: </td>
<td><input size="30" type="password" name="lozinka" /></td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="Prijavi se!" /></td>
</tr>
</form>
</table>';

}

}

if ($_GET["action"]=="prijava") {

if($_SESSION['prijavljen']== 1) {
} else {

$korisnickoime = mysql_real_escape_string(stripslashes($_POST[korisnickoime]));
$mb5_lozinka = md5($_POST[lozinka]);

$result=mysql_query("SELECT * FROM korisnici WHERE korisnickoime='$korisnickoime' and lozinka='$mb5_lozinka'") or die ("nije izvršena provjera u bazi");

$brojanje=mysql_num_rows($result);

if($brojanje==1){
$_SESSION['korisnickoime'] = $korisnickoime;
$_SESSION['prijavljen'] = 1;
header("location:index.php");
} else {
	echo'<p class="malitext">Netačno korisničko ime ili lozinka! <a href="javascript:history.back()">Idi nazad</a></p>';
}

}

}

?>

a skripta za registraciju je

<?php

if ($_GET["action"]=="registrujse") {

if($_SESSION['prijavljen']== 1) {
} else {
	echo'
<table border="0" cellpadding="5" cellspacing="0">
<form action="?action=registriraj" method="POST">
<tr>
<td align="right" class="malitext">Korisničko ime: </td>
<td><input size="30" type="text" name="korisnickoime" /></td>
</tr>
<tr>
<td align="right" class="malitext">Lozinka: </td>
<td><input size="30" type="password" name="lozinka" /></td>
</tr>
<tr>
<td align="right" class="malitext">E-mail: </td>
<td><input size="30" type="text" name="email" /></td>
</tr>
<tr>
<td align="right" class="malitext">Ja sam: </td>
<td align="left"><select name="spol">
<option value="-1">Odaberi spol:</option>
<option value="muško">muško</option>
<option value="žensko">žensko</option></select>
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="Registruj se!" /></td>
</tr>
</form>
</table>';

}

}

if ($_GET["action"]=="registriraj") {

if($_SESSION['prijavljen']== 1) {
} else {

$korisnickoime = "$_POST[korisnickoime]";
$lozinka = "$_POST[lozinka]";
$email = "$_POST[email]";
$spol = "$_POST[spol]";

$provjera_korisnickoime = mysql_query (" SELECT * FROM korisnici WHERE korisnickoime ='".$korisnickoime."' ") or die ("nije izvršena provjera u bazi"); 
$provjera_emaila = mysql_query (" SELECT * FROM korisnici WHERE email ='".$email."' ") or die ("nije izvršena provjera u bazi");

if (empty($korisnickoime)) {
	echo'<p class="malitext">Niste upisali korisničko ime! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (mysql_num_rows($provjera_korisnickoime)>0) {
	echo'<p class="malitext">Korisničko ime ' ,$korisnickoime, ' već postoji u bazi! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (preg_match('/[-!#$%&\'*+\\.\/=?^`{|}~]/', $korisnickoime)) {
	echo'<p class="malitext">Upišite validno korisničo ime (samo slova, brojevi i _crte)! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif((strlen($korisnickoime)<=2)) {
	echo'<p class="malitext">Korisničko ime nemože sadržavati manje od 2 znaka! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif((strlen($korisnickoime)>15)) {
	echo'<p class="malitext">Korisničko ime nemože sadržavati više od 15 znakova! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (empty($lozinka)) {
	echo'<p class="malitext">Niste upisali lozinku! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif((strlen($lozinka)<=4)) {
	echo'<p class="malitext">Lozinka nemože sadržavati manje od 4 znaka! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif((strlen($lozinka)>50)) {
	echo'<p class="malitext">Lozinka nemože sadržavati više od 50 znakova! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (empty($email)) {
	echo'<p class="malitext">Niste upisali e-mail! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (mysql_num_rows($provjera_emaila)>0) {
	echo'<p class="malitext">E-mail ' ,$email, ' već postoji u bazi! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) {
	echo'<p class="malitext">Niste upisali ispravnu e-mail adresu! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif((strlen($email)>100)) {
	echo'<p class="malitext">E-mail adresa nemože sadržavati više od 100 znakova! <a href="javascript:history.back()">Idi nazad</a></p>';
} elseif (in_array($spol, array(-1))) {
	echo'<p class="malitext">Niste odabrali spol! <a href="javascript:history.back()">Idi nazad</a></p>';
} else {

$mb5_lozinka = md5("$lozinka");

$imebaze="INSERT INTO korisnici (korisnickoime, lozinka, email, spol)

VALUES ('$korisnickoime', '$mb5_lozinka', '$email', '$spol')";

if (mysql_query($imebaze)) {
	echo'<p class="malitext">Uspješno ste se registrirali!</p>';
} else {
	echo'<p class="malitext">Nastala je greška pri registraciji! <a href="javascript:history.back()">Idi nazad</a></p>';
}

}

}

}

?>

i jel sad treba u registraciji napraviti SESSION, ili imali neko uradjenu skriptu pa da vidim primjer.

[quote=“ivan.skugor”]0) pokrenes session i korisnikove podatke spremis u session (a ne bazu!)

  1. generiras jedinstveni id sa funkcijom “unique_id” (ili tako nesto)
  2. spremis taj id u $_SESSION
  3. posaljes email sa linkom tako da u query stringu imas taj id (npr.
    http://www.example.com/activation.php?activation_id=iuTe82NAe2238sdAS
    )
    4)u activation.php (ili u kojoj ces vec skripti to procesirati) usporedis to sta imas u get parametru ($_GET[‘activation_id’]) i to sta imas u session-u ($_SESSION[‘activation_id’]). Dakle,

Jako elegantno rjesenje jer se ne moras brinuti oko toga sta sa neaktiviranim korisnicima (nakon isteka session-a se ti podaci obrisu).[/quote]

Možeteli mi reći kako i gdje da kreiram jedinstveni unique_id

U Google upises “PHP generate unique id” i ko prvi rezultat dobijes:

http://php.net/manual/en/function.uniqid.php

evo napravio sam nešto al neradi kako treba pa bih vas molio za pomoć

kada korisnik se registruje na njegov mail se šalje

$aktivacija = md5($korisnickoime.$lozinka.$email.$spol.microtime());

mail("$email", "$nazivportala - aktivacijski link", "Pozdrav! Vaše korisničko ime je $korisnickoime a lozinka $lozinka, 

link za aktivaciju je http://www.suki.1free.ws/aktivacija.php?korisnickoime=$korisnickoime&aktivacija=$aktivacija");


// Šalje na moj mail
mail("$webmaster_email", "$nazivportala - registriro se novi korisnik!", "Registriro se novi korisnik $korisnickoime");

i podaci se spremaju u bazu

$mb5_lozinka = md5($lozinka);

$imebaze="INSERT INTO korisnici (korisnickoime, lozinka, email, spol, aktivacija)

VALUES ('$korisnickoime', '$mb5_lozinka', '$email', '$spol', '$aktivacija')";

if (mysql_query($imebaze)) {
header("Location:registracija.php?akcija=registracija2"); exit;

} else {
	echo'Nastala je greška pri registraciji!';
}

e kad korisnik klikne na aktivacijski link izbaci mu grsešku da nije aktiviran

provjera aktivacije

<?php

include "Postavke.php";

mysql_query("UPDATE korisnici SET aktivacija='D' WHERE korisnickoime='$korisnickoime' AND aktivacija='$aktivacija'") or die ("nije izvršena provjera u bazi");

if(mysql_affected_rows()==1) {
	echo'<p class="srednjitext" align="center">Aktivacija je uspiješna, sada se možete prijaviti!
<a href="index.php">Idi na početnu stranicu!</a></p>';
} else {
	echo'<p class="srednjitext" align="center">Aktivacija nije uspjela!
<a href="index.php">Idi na početnu stranicu!</a></b>';
}

?>

znali neko u cemu je problem?

i još ima jedna greška u e-mail/a mi naslov bude “root”

U praksi se događa da e-mail koji tvoj sajt pošalje i ne stigne baš tako brzo, šta onda? Ovaj problem mi se recimo jako često javljao sa mailovima poslatim od strane servisa prema hotmail.com adresama. Nisam primetio da je dolazilo do toga da mail ne bude isporučen ali je bilo slučajeva da kašnjenja budu i preko 6 sati. Ponavljam, ovo se dešavalo samo sa aktivacijskim mailovima poslatim na adrese tipa [neki_username]@hotmail.com dok sa svim ostalim mail servisima sve radi kako treba. Session zna da istekne pa onda nastaje problem i u 90% slučajeva takav korisnik se neće ponovo registrovati, zar ne?

Varijanta sa hash podacima u bazi mi je nekako mnogo elegantnija, na kraju može se lako podesiti da se brišu neaktivni nalozi posle određenog vremena ako nisu aktivirani.

A nista, cekaj 6 sati i refreshaj stranicu da ti session ne istekne. :smiley:

Salim se … To nije “normalna” situacija. I problem nije u skripti i pristupu po mom misljenju, nego u “tvom” mail serveru.

U normalnim situacijama mail dodje za minutu maksimalno (pa ne saljemo vise golubove :wink: :smiley: ).

ma to što ti kasni mail to je do servera, u mene gdje sam smjestio ovu skriptu da isprobam na free hosting hxxp://www.1free.ws moram čekati pola sata da stigne mail.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja