![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2009 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
witam,
![]() Czy ktokolwiek wie, jak wymusić zmianę, albo przypomnieć użytkownikowi hasło zapisane w bazie mysql(używając phpmyadmin). Do weryfikacji chcę użyć adresu majlowego, z wysłaniem przypomnianego hasła sobie poradzę, bynajmniej potrzebuję pomocy. ![]() -------------------- Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Hasło w bazie przechowywane jest w formie jakiegoś hasha czy może jawnie?
|
|
|
![]()
Post
#3
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
1. Opcja w panelu administracyjnym (np. "Przypomnij o zmianie hasła") - skrypt wybiera z bazy uzytkowników, których data zmiany hasła (odpowiednie pole w tabeli) jest starsza niz ustawiony w innej opcji interwał czasowy (np. 30 dni), następnie w pętelce wysyła odpowiedniego maila do usera. Po zaktualizowaniu przez niego hasła pole w kolumnie z datą jest odpowiednio modyfikowane
2. To samo, ale wrzucone do cron-a, z częstotliwością uruchamiania np. co godzinę ![]() Zakładam, że to hasło user może sobie zmienic sam, np. w jakimś tam swoim profilu Ten post edytował blooregard 4.02.2009, 16:06:40 -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2009 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
hasło nie jest hashowane, a mi chodzi o przypomnienie zapomnianego hasła, słyszałem, że lepiej wymusić zmianę, dlatego też zawarłem to w temacie.
Oto mój kod: CODE <? mysql_connect ("localhost", "root", "*******") or die ("Nie można połączyć z bazą danych!"); mysql_select_db ("notatnik_users") or die ("Nie można czytać tabeli"); $user_dane = mysql_query("SELECT * FROM user_primary WHERE usr_name='$usr' and usr_email='$email' and usr_pswrd='$pswrd'") or die ("BŁĄD!Nie ma danych w tabeli lub błąd w pytaniu!"); while ($rekord=mysql_fetch_assoc($user_dane)){ $usr = $rekord['usr_name']; $email = $rekord['usr_email']; $pswrd = $rekord['pswrd']; } if ($_POST['email'] && $_POST['usr'] && $_POST['pswrd']){ //wypisz lub wyślij hasło na mail`a } else { print ' <form method=post> <TABLE align=center cellpadding=4 cellspacing=0> <TR> <TD><input type=hidden name=pswrd value='.$pswrd.'><input type=text name=usr value="Nazwa użytkownika"></TD> <TD><input type=text name=email value="Twój email"></TD> <td> </td> <TD align=right><input type=submit value=Przypomnij></TD> </TR> </TABLE>'; } ?> Podejrzewam, że coś jest źle w zapytaniu mySQL... -------------------- Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
|
|
|
![]()
Post
#5
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
1. Najpierw poprawka (zwróc uwagę na znaki ' i " )
Kod $user_dane = mysql_query("SELECT * FROM user_primary WHERE usr_name='".$usr."' and usr_email='".$email."' and usr_pswrd='".$pswrd." ' ") 2. Nie widzę w zapytaniu żadnego kryterium, które wskazywałoby na fakt przeterminowania hasła. Wysyłasz zawsze tego maila z przypomnieniem hurtem, do wszystkich, nawet tych, co zmienili hasło 5 minut wcześniej ? -------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 4.02.2009 Skąd: Dublin Ostrzeżenie: (0%) ![]() ![]() |
Bo mi nie chodzi o zmianę dla bezpieczeństwa, tylko dlatego że ktoś zapomniał, np. podaję mój adres email, nazwę użytkownika, aplikacja porównuje dane w formularzu z tymi które są w bazie danych, jeśli się zgadza wysyła na podany email hasło zapisane w bazie.
-------------------- Nie myśl że wszyscy wiedzą wszystko, wiedz, że TY wiesz najmniej
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli hasło przechowujesz w formie jawnej to możesz zrobić prawdziwe "przypominanie".
1) Formularz w którym podaje się adres email i ew. login 2) Pobierasz hasło z tabeli użytkowników gdzie email = email_z_formularza (jeżeli dodatkowo jest login to jeszcze dodajesz w warunku AND login = login_z_formularza) 3) Na podany adres email wysyłasz hasło (mail" title="Zobacz w manualu PHP" target="_manual) 4) Koniec A jeżeli chciałbyś zrobić generowanie nowego hasła to sprawa jest nieco bardziej skomplikowana (ale nadal bardzo prosta) 1) Jak wcześniej 2) Jak wcześniej z tym, że pobierasz ID, login, adres-email 3) W tabeli z użytkownikami musisz mieć dodatkową kolumnę, nazwijmy ją verifCode (typu CHAR(32)). Domyślna wartość jaką będzie przyjmowała to NULL. 4) Teraz musisz wygenerować losowy ciąg, który zostanie wysłany na maila w celu weryfikacji
5) Kod ten zapisujesz do kolumny verifCode w tabeli użytkowników gdzie id = id_wyciagniete_ze_wczesniejszego_zapytania 6) Do użytkownika wysyłasz maila, w którym znajduje się link w postaci: example.com/pass.php?userid=XX&verif=YYY Gdzie XX to ID użytkownika, a YYY to wygenerowany kod ($verifCode) 7) Tworzysz plik pass.php 8) W nim sprawdzasz czy dla użytkownika o ID = $_GET['userid'] kolumna verifCode = $_GET['verif']. 9) Jeśli nie, nie robisz nic 10) Jeśli tak to rozpoczynasz generowanie hasła 11) Musisz wygenerować nowe hasło. Możesz to zrobić np. przy pomocy
12) Tak wygenerowane hasło zapisujesz w bazie danych i wyświetlasz je użytkownikowi |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.06.2025 - 10:17 |