Cześć.
Temat wałkowany nie raz, ale nie udało mi się znaleźć tego, co mnie „dręczy”.
Chciałem zapytać o logowanie i użytkowników, ale pod kątem tabeli w bazie danych.
Niezbędne minimum w takiej tabeli users to 3 pola:
id (AUTO_INCREMENT), login (z kluczem unique), password_hash. ( w sumie id chyba nawet nie jest niezbędne).
Dodatkowo:
Imię i nazwisko (w 1 kolumnie, czy w 2?) Ja bym zrobił w 2,
email,
data_rejestracji (CURRENT_TIMESTAMP),
aktywny. (informacja o tym, czy użytkownik może się logować. Wolę ustawić info, że zablokowany, niż usuwać, by nie stracić informacji użytkowniku, którego id będzie wpisane w jakiejś innej tabeli).
Czy informację o liczbie logowań, dacie ostatniego logowania, udanym logowaniu, zapisywać w tabeli users, czy do tych rzeczy założyć osobną tabelę users_login_history?
Wydaje mi się, że osobna tabela byłaby lepsza, daje całą historię (prób) logowań. Chyba łatwiej też byłoby na podstawie danych z takiej tabeli np. zablokować czasowo użytkownika po np. 3 nieudanych próbach logowania. Co myślicie?
Czy w tabeli users_login_history warto zapisać IP (wg mnie warto) oraz $_SERVER['HTTP_USER_AGENT']?
W tabeli users_login_history kolumny:
id (AUTO_INCREMENT), user_id, date (CURRENT_TIMESTAMP), IP, user_agent.
Jeszcze jedno sobie wymyśliłem... W tabeli users chciałbym dołożyć kolumnę salt. W tą kolumnę zapisywałbym ciąg np. 20 znaków, który były generowany losowo podczas rejestracji użytkownika. Ten ciąg znaków byłby doklejany do hasła użytkownika przed hashowaniem password_hash($pass_user.$randsalt, PASSWORD_DEFAULT). Czy lepiej robić to przez dodanie losowej soli w $options: password_hash($pass_user, PASSWORD_DEFAULT, $options)?
Co o tym myślicie? czy to już zbędne udziwnianie?