Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odnośnik aktywacyjny
Forum PHP.pl > Forum > Przedszkole
Tho
Funkcja mail działa mi poprawnie, przetestowałem, - maile dochodzą, wszystko w porządku. Teraz chciałbym mieć możliwość dodania do wiadomości powitalnej linku przez który można aktywować swoje konto, tylko przez powiedzmy 24 godziny. Później ten link byłby nieważny.

Przeczytałem że trzeba stworzyć kolumnę z możliwościami 0/1 - logiczne. Ale jak dokładnie powinna wyglądać int(1) (Proszę o więcej szczegółów)?

I najważniejsze: Jak wygenerować ten "link z numerem" aktywnym tylko przez jakiś czas?
Ruch Radzionków
może pod cron podłącz
np.
w bazie danych bedzięsz miał date ważności kodu jeżeli ona przeminie to cron wysyła wiadomośc nową z nastepnym linkiem
Tho
Ma to być zrobione możliwie najprościej. smile.gif
Daiquiri
Nie łatwiej dodać w bazie pola data i klucz, przy czym klucz jest aktywny wyłącznie do czasu data wygenerowania + np. 1 dzień? Nie wiem po co tutaj cron. Dodając pole w tabeli np. is_active o typie boolean (domyślnie wypełnione na FALSE), możesz sprawdzać czy ktoś jest aktywny itd.
Tho
To już jakaś wskazówka, ale co z linkiem? Jak "tworzyć tymczasowy link"?
Daiquiri
Wysyłasz link, w którym klucz=pole klucza w bazie. Po kliknięciu przez usera, sprawdzasz czy klucz się zgadza i jeżeli tak, to czy user zmieścił się w zadanym przedziale czasowym (sprawdzasz w oparciu o pole daty/godziny w której wygenerowano ciąg klucza).
lobopol
A mi do głowy przyszło takie nieco głupie rozwiązanie tworzymy linka w ten sposób link.pl?id=id_usera&magiczny_hash=magiczny_hash&data=data_zakonczenia
gdzie data to data do której ma być ważny kod, magiczny_hash to np.
  1. $magiczny_hash = sha1('jakieś dane wyciągnięte z bazy dla danego id_usera'.'jakaś sól'.'data zakończenia w formie unixtime');

Wiem, nieco śmieszne rozwiązanie, ale właśnie mi przyszło do głowy smile.gif, w zasadzie mogłoby się sprawdzić.
Tho
"jakaś sól" ? smile.gif

Czy mnógłby ktoś na szybko napisać to rozwiązanie z tą datą? Byłbym wdzięczny.
lobopol
Proszę masz znaczną część odbiór bardzo podobny tworzysz z parametrów przesłanych w linku hash i porównujesz go z przesłanym, jeżeli są takie same i data jest mniejsze niż time() to hash jest aktywny;
  1. $login = 'login z bazy';
  2. $sol = 'asidhsalnasa2$da:;c';
  3. $rejestracja = 'data rejestracji z bazy'
  4. $mail = 'mail z bazy';
  5. $waznosc_linka = time()+3600*24;
  6. $id = 'id_uzytkownika';
  7. $link_czasowy = 'link.pl?id='.$id.'&hash='sha1($login.$sol.$rejestracja.$mail.$waznosc_linka).'&data='.$waznosc_linka;

Posio
Siemka. Ja mam zrobione tak:

-Przy rejestracji funkcja hashuje Login, Email, Date urodzenia i co tam jeszcze chcecie
-Wrzuca to do bazy danych jako 'hash'
-Tworzy również podczas rejestracji pole 'status' = '0'
-Oraz pole z datą założenia konta

-Wysyłam mailem do użytkownika maila z linkiem gdzie przez get przesyłam hash do danego pliku.

w pliku if($_GET[activation_code] == 'hash'){ (oczywiscie wczesniej zostaje pobrany hash z bazy danych i jest jeszcze funkcja sprawdzająca czy data założenia konta nie jest dłuższa niz 7 dni)

Po tym jesli funkcja zwraca TRUE zmieniam w bazie z '0' na '1'

U mie działa aż łezka w oku się kręci haha.gif
Tho
Czy można utworzyć link aktywacyjny na podstawie samego e-maila i daty zarejestrowania? Tabele: 'email' i 'datadolacz', no i najważniejsze, jak zmienić kliknięciem "0" na "1" w tabeli "aktywnosc" od wczoraj grzebię szukam i nic z tego nie wynika, bo gubie się na tej właśnie podstawie, syzyfowa praca, dopłuki nie ogarnę podstaw nigdy tego nie zrobię... Jakieś wskazówki? Byłbym ogromnie wdzięczny...
Daiquiri
Cytat(Tho @ 22.10.2011, 17:56:47 ) *
jak zmienić kliknięciem "0" na "1" w tabeli "aktywnosc"
Jeżeli warunek aktywacji został spełniony zrób po prostu UPDATE pola w bazie smile.gif.



qrooel
W tabeli z użytkownikami jest: id, e-mail, token, hasło, is_active oraz datadodania.

W momencie dodania nowego użytkownika, generujesz dla niego jakiś hash - np. za pomocą sha1, ten hasz leci do tabelki token.

Klient otrzymuje maila z linkiem, który wygląda np. tak: www.mojastrona.pl/aktywacja?token=eqwjkl34u789fdashk489uasd71234nkjrh789ew7.

Kiedy w niego kliknie, skrypt ma poszukać użytkownika w bazie o takim haszu, znajdzie jednego.
Następnie sprawdza czy nie przekroczył jakiegoś tam czasu:
http://www.highlystructured.com/comparing_dates_php.html
http://php.net/manual/en/function.strtotime.php
Albo tak jak ktoś wyżej podał: $waznosc_linka = time()+3600*24;

Jak nie przekroczył, to robisz update na tym użytkowniku w kolumnie is_active na 1 i tyle, użytkownik aktywowany, jak przekroczył czas to komunikat.
http://www.w3schools.com/php/php_mysql_update.asp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.