Autor | Zpráva | ||
---|---|---|---|
anonymní Profil * |
#1 · Zasláno: 29. 11. 2009, 18:24:54
Ahoj, na mnoha stránkách s přihlášením se vyskytuje odkaz "Zapomněli jste heslo?". Jak se to v php řeší?
Nastíním moji vizi: Při registraci budu chtít po uživateli login, heslo a e-mail - vše uložím do databáze. Poté co uživatel klikne na "Zapomněli jste heslo?" se mu zobrazí formulář aby zadal login a e-mail. A podle těchto údajů zjistim jeho heslo a pošlu mu ho e-mailem? A co když ale mám jeho heslo uložené jako hash? Co mu pak pošlu? Díky |
||
SkIpPeR Profil |
#2 · Zasláno: 29. 11. 2009, 18:28:57
ja to mam řešený takhle:
<h3>Odeslání zapomenutého hesla</h3> <p> Zapomenuli jste heslo?<br/> Nic se neděje. Vygenerujeme Vám nové, které zašleme na Vámi zadaný e-mail při registraci. </p> <form action="./zpracuj/prihlaseni-zapomenute-heslo_zpracuj.php" method="post"> Zadejte email: <input type="text" name="LostPassEmail" class="input" size='30' maxlength='50'/><br/> <input type="submit" value="Odešli" class="input"/> </form> <?php ob_start(); session_start(); include'../index/function.php'; include'../index/config.php'; mysql_connect($dbserver, $dblogin, $dbheslo); mysql_select_db($dbnazev)or die('Nepodařilo se připojit k databázi. <b>Systém není naistalován!</b><br /> Před instalací je nutno vyplnit údaje v souboru "config.php"!<br /> <a href="install.php">Instalace systému</a>'); mysql_query("SET NAMES 'utf8'"); if(isset($_POST['LostPassEmail'])){ $mail=$_POST['LostPassEmail']; $mailexist=mysql_num_rows(mysql_query("SELECT `mail` FROM uzivatele WHERE `mail`='$mail' ")); if($mailexist==0){ $bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=10"; header("location: $bl"); }else{ $NoveHeslo=DejNahodneCislo(); $NoveHeslo2=md5($NoveHeslo); $UpdatePass=mysql_query("UPDATE uzivatele SET `heslo`='$NoveHeslo2' WHERE `mail`='$mail'") or die (mysql_error()); if(!$UpdatePass){ $bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=13"; header("location: $bl"); }else{ $subject = "Odeslani zapomenuteho hesla"; $headers = "Content-Type: text/html; charset=utf8\n"; $zprava = "Vase nove heslo je: ".$NoveHeslo."<br> S pozdavem Blinds.tym"; $PosliMail=mail($mail, $subject, $zprava, $headers); if(!$PosliMail){ $bl="../index.php?page=prihlaseni-zapomenute-heslo&Alert=12"; header("location: $bl"); }else{ $bl="../index.php?Alert=11"; header("location: $bl"); } } } }else{ echo "Nemas tu co delat, nebyl odeslany zadny email."; } // konec kontroly zda je povolene zasilani hesla na mail. ob_end_flush(); ?> |
||
Radek9 Profil |
#3 · Zasláno: 29. 11. 2009, 18:35:59
anonymní:
Já vygeneruji náhodné heslo, uložím do souboru s uživatelem a pošlu mu ho na mail. |
||
anonymní Profil * |
#4 · Zasláno: 29. 11. 2009, 18:38:43
SkIpPeR:
Ale pak mu přijde zašifrované heslo ve tvaru 15fdg4d5fg4fd5g4dfg nebo ne? Radek9: Takže vůbec nepoužíváš hash? |
||
Taps Profil |
#5 · Zasláno: 29. 11. 2009, 18:44:35
anonymní:
je celkem jedno zda se odešle hash nebo nějaké jiné zašifrované heslo. Ve většině případů to bývá tak že pokud uživatel zapomene heslo tak se mu na email odešle nějaké náhodně vygenerované heslo, které si pak po přihlášení změní. |
||
SkIpPeR Profil |
#6 · Zasláno: 29. 11. 2009, 18:45:06
v PHP si musíš ještě udělat funkci
function DejNahodneCislo(){ $num = rand(100000, 999999); return $num; } to ti vytvoří kód, a to se našte do proměné $NoveHeslo=DejNahodneCislo(); zakoduje se to až $NoveHeslo2=md5($NoveHeslo); ale e-mail pošlu s proměnou $zprava = "Vase nove heslo je: ".$NoveHeslo."<br> S pozdavem Administrator"; |
||
Radek9 Profil |
#7 · Zasláno: 29. 11. 2009, 19:06:06
anonymní:
Používám. Proto generuji nové. |
||
RockFire Profil |
#8 · Zasláno: 29. 11. 2009, 19:06:40
Jenom pro upřesnění. Odešleš mu heslo bez hashe a do db uložíš zahashované heslo.
|
||
SkIpPeR Profil |
#9 · Zasláno: 29. 11. 2009, 19:19:40
mužeš to udělat jako to mam ja, plus si tam mužeš přidat porovnávání i s přezdívkou (jménem)
|
||
Časová prodleva: 3 roky
|
|||
staco Profil |
#10 · Zasláno: 23. 2. 2013, 21:24:39
Ahojte zacinam s PHP a neviem si rady ako poslat uzivatelovi nove heslo tak aby sa stare vymazalo z databazy a nove vlozilo do databazy
Nove heslo mi vygeneruje a uspesne odosle ale potrebujem zistit ako vymazat to stare a nove ulozit do databazy k prislusnemu uzivatelovi(customer_id)Uz som skusal vselico ale nefunguje mi to Toto je html pre tlacitko a vola mi dalsi script a transact_user - poslat nove heslo = to funguje <h1>Pripomenutie zabudnuteho hesla</h1> <p>Zabudli ste svoje heslo? Zadajte svoju emailovu adresu a my Vam posleme nove heslo na Vas email!</p> <form method="post" action="cms_transact_user.php"> <div> <label for="email">Emailova adresa:</label> <input type="text" id="email" name="email" maxlength="100"/> <input type="submit" name="action" value="Poslat nove heslo!"/> </div> </form> Tu je switch pre "Poslat nove heslo" ,ktore mi uspesne posle nove vygenerovane heslo case 'Poslat nove heslo!': $mail = new PHPMailer(); $mail->IsSMTP(); // k odeslání e-mailu použijeme SMTP server $mail->SMTPDebug = 1; $mail->SMTPSecure = 'tls'; $mail->Host = 'smtp.gmail.com'; // zadáme adresu SMTP serveru $mail->Port = 25; $mail->SMTPAuth = true; $mail->SetLanguage("sk"); // nastavíme true v případě, že server vyžaduje SMTP autentizaci $mail->Username = "...."; // uživatelské jméno pro SMTP autentizaci $mail->Password = "...."; // heslo pro SMTP autentizaci $mail->SetFrom = "....@gmail.com"; $mail->AddReplyTo = "....@gmail.com"; $mail->Subject = "Obnovenie hesla pre web Lydka-Kozmetika !"; // nastavíme předmět e-mailu $mail->WordWrap = 50; // je vhodné taky nastavit zalomení (po 50 znacích) $mail->CharSet = "utf-8"; // nastavíme kódování, ve kterém odesíláme e-mail $mail->AddAttachment("images/phpmailer.gif"); // attachment $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment $email = (isset($_POST['email'])) ? $_POST['email'] : ''; //overenie existencie email if (!empty($email)) //email nie je prazdny { $sql = 'SELECT email FROM cms_users WHERE email="' . //vyber z databazy mysql_real_escape_string($email, $db) . '"'; $result = mysql_query($sql, $db) or die(mysql_error($db));} //vlozenie do result $password = strtoupper(substr(sha1(time()), rand(0, 32), 8));//generovanie noveho hesla $body = 'Vyzera to tak ze ste zabudli heslo, eh? Netrapte sa. ' . 'Vytvorili sme Vam nove!' . "\n\n"; $body .= 'Vase nove heslo je: ' . $password; while ($row = mysql_fetch_array ($result)) { $mail->AltBody = "Pohlad html !"; // $mail->MsgHTML($body); $mail->AddAddress($row["email"]); if(!$mail->Send()) { echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />'; } } // Odstranenie adersy a prilohy z pamete $mail->ClearAddresses(); $mail->ClearAttachments(); mysql_free_result($result); } redirect('cms_login.php'); break A tu je tabulka cms_user $sql = 'CREATE TABLE IF NOT EXISTS cms_users ( customer_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, email VARCHAR(100) NOT NULL UNIQUE, password CHAR(41) NOT NULL, name VARCHAR(100) NOT NULL, access_level TINYINT UNSIGNED NOT NULL DEFAULT 1, PRIMARY KEY (customer_id) ) ENGINE=MyISAM'; |
||
staco Profil |
#11 · Zasláno: 23. 2. 2013, 22:27:57
Tak je to vyriesene
vlozil som do kodu toto riadok 37 a funguje to $sql = 'UPDATE cms_users SET password = PASSWORD("' . mysql_real_escape_string($password, $db) . '") WHERE email = "' . mysql_real_escape_string($email) . '" '; mysql_query($sql, $db) or die(mysql_error()) case 'Poslat nove heslo!': $mail = new PHPMailer(); $mail->IsSMTP(); // k odeslání e-mailu použijeme SMTP server $password = strtoupper(substr(sha1(time()), rand(0, 32), 8)); $body = 'Vyzera to tak ze ste zabudli heslo, eh? Netrapte sa. ' . 'Vytvorili sme Vam nove!' . "\n\n"; $body .= 'Vase nove heslo je: ' . $password; $mail->SMTPDebug = 1; $mail->SMTPSecure = 'tls'; $mail->Host = 'smtp.gmail.com'; // zadáme adresu SMTP serveru $mail->Port = 25; $mail->SMTPAuth = true; $mail->SetLanguage("sk"); // nastavíme true v případě, že server vyžaduje SMTP autentizaci $mail->Username = "mstacoo"; // uživatelské jméno pro SMTP autentizaci $mail->Password = "slobodaxllx"; // heslo pro SMTP autentizaci $mail->SetFrom = "mstacoo@gmail.com"; $mail->AddReplyTo = "lydasi@gmail.com"; $mail->Subject = "Obnovenie hesla pre web Lydka-Kozmetika !"; // nastavíme předmět e-mailu $mail->WordWrap = 50; // je vhodné taky nastavit zalomení (po 50 znacích) $mail->CharSet = "utf-8"; // nastavíme kódování, ve kterém odesíláme e-mail $mail->AddAttachment("images/phpmailer.gif"); // attachment $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment $email = (isset($_POST['email'])) ? $_POST['email'] : ''; //overenie existencie email if (!empty($email)) //email nie je prazdny { $sql = 'SELECT email FROM cms_users WHERE email="' . //vyber z databazy mysql_real_escape_string($email, $db) . '"'; $result = mysql_query($sql, $db) or die(mysql_error($db));} //vlozenie do result $sql = 'UPDATE cms_users SET password = PASSWORD("' . mysql_real_escape_string($password, $db) . '") WHERE email = "' . mysql_real_escape_string($email) . '" '; mysql_query($sql, $db) or die(mysql_error()); while ($row = mysql_fetch_array ($result)) { $mail->AltBody = "Pohlad html !"; // $mail->MsgHTML($body); $mail->AddAddress($row["email"]); if(!$mail->Send()) { echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />'; } else { echo "Message sent to :" . $row["email"] . ' (' . str_replace("@", "@", $row["email"]) . ')<br />'; } // Clear all addresses and attachments for next loop $mail->ClearAddresses(); $mail->ClearAttachments(); mysql_free_result($result); } redirect('cms_login.php'); break; |
||
Časová prodleva: 11 let
|
0