Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Technologia sesji B. PHP.prosta droga Przechowywanie informacji dla użytkownika jednego użytkownika. Na przykład: towary dodane do koszyka zakupów, ustawienia powiadomienia itp. Gdy strona jest po raz pierwszy żądana do serwera, przeglądarka jest zapisywana w unikalnych plików cookie identyfikator sesji. Użytkownik. Następnie identyfikator lub wiązka identyfikatora z adresem IP identyfikuje użytkownika. Można go użyć do zapisania statusu żądań stron. Identyfikatory sesji są zazwyczaj wysyłane do przeglądarki poprzez plik cookie sesji i służą do uzyskania dostępnych danych sesji.

Sesje są używane prosta technologia: PHP otrzyma dane dotyczące istniejącej sesji przy użyciu przesyłanego identyfikatora (zwykle z sesji ciastko) Lub, jeśli nic nie zostało przekazane, zostanie utworzona nowa sesja. PHP wypełnia zmienną Superglobal $ _SESSION przez informacje o sesji po uruchomieniu sesji. Po zakończeniu PHP automatycznie serializuje zawartość zmiennej Superglobal $ _Session i wysyła, aby zapisać za pomocą programu obsługi sesji, aby nagrać sesję.

Domyślnie PHP używa wewnętrznego przewodnika akta. Aby zapisać sesje, które jest zainstalowane w Session.Save_Handler INI zmiennej. Ten przewodnik oszczędza dane na serwerze w katalogu określonym w dyrektywie konfiguracyjnej session.Save_path.

Najprostszym przykładem korzystania z sesji, na przykład, wyjście numerów kontaktów do strony dla każdego użytkownika:

Jak można możliwe sesje

Na stronie PHP w sekcjach Opis sesji jest notatka (http://php.net/manual/ru/session.examples.basic.php):

Sesje za pomocą plików (domyślnie w PHP.), Natychmiast zablokuj plik sesji, gdy sesja otwiera funkcję session_start () lub pośrednio przy określaniu sesji.Auto_start. Po zablokowaniu, żaden inny skrypt nie może uzyskać dostępu do tego samego pliku sesji, dopóki nie zostanie zamknięty lub gdy skrypt zostanie zakończony lub gdy wywołana jest funkcja session_write_close ().

Najprawdopodobniej będzie problemem dla witryn, które aktywnie używać Ajax. I wykonaj kilka jednoczesnych wniosków. Najprostszym sposobem na rozwiązanie tego problemu będzie połączenie funkcji session_Wite_close () natychmiast, gdy tylko wszystkie wymagane zmiany w sesji są wykonane, najlepiej bliższe do początku skryptu. Możesz także użyć innego mechanizmu sesji, który obsługuje konkurencyjny dostęp.

Ostatnio problem blokujący sesje staje się coraz częstszy. Jest to częściowo ze względu na komplikację witryn i potrzeba wytwarzania większej liczby obliczeń na serwerze silniejszym, a także z wielką dystrybucją Ajax.. Niestety, logika aplikacji nie zawsze jest, zwłaszcza jeśli jest skomplikowana, pozwala skutecznie ograniczyć czas blokowania konkurencyjnych procesów. Sytuacja jest obciążona faktem, że 3-5 takich klientów są w stanie szybko wygrać wisiała i bezczynność w oczekiwaniu na procesy PHP-Workche, co skutkuje witryną rozpocznie się wydawanie Błąd 5xx. .

Najprostszym przykładem sesji blokujących:

// tylko dla jednego skryptu ?>

Jeśli najpierw otworzysz ten plik na pierwszej karcie, a następnie w drugiej - Druga karta będzie czekać, aż pierwszy włącza się do pierwszego. Oznacza to, że druga karta będzie czekać, aż pierwszy nie zwolni plik sesji (który zajmuje w określonym przypadku 30 sekund). Ten problem dobrze opisane na blogu firmy 1c-bitrix. Na HabrahaBr.

Jakie opcje rozwiązywania tego problemu istnieją

Możesz użyć bazy danych do przechowywania sesji MySQL. lub PostgreSQL. (co nie jest dobre, biorąc pod uwagę możliwości większości baz danych i możliwą prędkość pracy to zadanie), Memcached. (nie gwarantuje pamięci sesji, można go usunąć) i Redisrozważamy optymalna pamięć masowa. Z prędkością nie jest gorsza od memcached, ale może zagwarantować bezpieczeństwo danych.

I najważniejsza zaleta Redis - Po zapisaniu w nim sesje nie są zablokowane.

W naszym panelu sterowania () można włączyć sesje pamięci masowej w Redis dla wszystkich witryn na koncie. Aby to zrobić, przejdź do sekcji " Witryny", a potem świętuj kleszczkę -" Przechowuj sesje wszystkich witryn w Redis".

Dodatkowe materiały

Sekcje

Ssh.

Ftp.

Aplikacje internetowe

  • Informacje o instalacji aplikacji Ogólne (Docker Virtual Environment)

Diagnoza problemów

Domeny

  • Anulowanie nazwy domeny w strefie.ru / .rf, dla którego spodni jest rejestrator
  • Przeniesienie nazw domen Administration Rights.ru / .RF / strefy międzynarodowe (zmiana domeny administratora)

.
W tym artykule dodamy do naszej rejestracji czekmI.- pocztaadresy, automatyczne logowanie i przywrócenie zapomniałeś hasła . Przed kontynuowaniem lekcji upewnij się, że masz funkcję na serwerze poczta ().

Zacznij od dodawania pól do tabeli « użytkownicy.» . Potrzebujemy pola do przechowywania adresu e-mail, pole dla statusu użytkownika (0 - nieaktywne, 1 - aktywowane) i pole z datą rejestracji.





Następnie należy poprawić save_user.php.Dodając weryfikację poprawności adresu e-mail i wysyłanie listu, aby potwierdzić rejestrację. List zawiera link z dwiema zmiennymi transmitowanymi przez metodę GET : Zaloguj się i wygenerowane, unikalne dla każdego użytkownika, kodu. Kode, którego potrzebujemy, aby użytkownik nie mógł aktywować jego konta bez listu, a to da nam pewność, że wprowadzony adres post jest naprawdę należący do niego. Dodaj następujący kod po wyodrębnianiu danych z zmiennych globalnych:

Jeśli (ISSET ($ _ Post ["Email"])) ($ Email \u003d $ _Post ["Email"]; jeśli ($ e-mail \u003d\u003d "") (Unset ($ e-mail);)))))))))))))))
Jeśli (pusty ($ login) lub pusty ($ hasło) lub pusty ($ kodu) lub pusty ($ e-mail))
// Dodaj zmienną zmI.- pocztaadres
// Jeśli użytkownik nie wprowadził loginu lub hasła, podajemy błąd i zatrzymamy skrypt
{
Wyjdź ("Wprowadziłeś nie wszystkie informacje, wróć i wypełnij wszystkie pola!"); // Rozpocznij wykonanie scenariuszy
}
Jeśli (! preg_match ("/ [Chroniony e-mail]+. (2.3) / I ", $ e-mail)) // Sprawdź adresy e-mail wyrażenia regularne Poprawność
(Wyjście ("E-mail jest nieprawidłowy!");)

Wniosek o dodanie nowego użytkownika musi zostać rozwiązany, a data rejestracji. Jeśli dane zostaną pomyślnie wstawiane do bazy danych, a użytkownik jest zarejestrowany, musisz wysłać wiadomość na adres:

// jeśli nie, zapisujemy dane
$ Dostawca2 \u003d MySQL_QUERY ("Wstaw użytkowników (login, hasło, awatar, e-mail, daty) wartości (" $ Login "," $ Hasło "," Avatar "," $ e-mail ", teraz ())") ;
// Sprawdź, czy są błędy
If ($ Rest2 \u003d\u003d "Prawda")
{
$ Dostawca3 \u003d MySQL_Query ("Wybierz ID od użytkowników, w których logowanie \u003d" $ Login "", $ DB); // Usuń identyfikator użytkownika. Dzięki nim będziemy unikalny kod Aktywacja, ponieważ nie mogą być dwie identyczne identyfikatory.
$ Myrow3 \u003d mysql_fetch_array ($ wynik 3);
$ Aktywacja \u003d MD5 ($ Myrow3 ["ID"]). MD5 ($ Login); // kodaktywacjakonto. Wprowadź identyfikator funkcji MD5 i login. Taka kombinacja użytkownika jest mało prawdopodobna, aby ręcznie uczynić go ręcznym przez pasek adresu.
$ Temat \u003d "Potwierdzenie rejestracji"; //Temat wiadomości
$ Message \u003d "Witaj! Dzięki za rejestrację na CitoneMe.ru NVAS Login:". $ Login. "N
Postępuj zgodnie z linkiem, aby aktywować swoje konto: NHTTP: //Localhost/test3/aktyway.php? Login \u003d ". $ Login." & Code \u003d ". $ Aktywacja." Szacunek NC, N
Administracja Citekse.ru; // Spis treści Wysłany
Poczta ($ e-mail, $ Temat, $ Message, "Typ treści: tekst / płaszczyzna; Charset \u003d Windows-1251 r n"); // Wysłać wiadomość

Echo "Jesteś wysłany do listu e-mail z odosobnieniem, aby potwierdzić rejestrację. Uwaga! Link jest ważny przez 1 godzinę. Strona główna"; // mówimy o liście wysłanym przez użytkownika
}

Wiadomość wysłana! Teraz użytkownik otworzy go i przejdź do wskazanego linku do strony, która sprawdzi kod aktywacyjny. Upewnienie się, że kod jest wierny, potwierdzamy rejestrację, zmieniając wartość pola w bazie danych aktywacja. Z "0" do "1".

Utwórz plik. aktywacja.php.

Obejmują ("bd.php"); // plik.bd.. pHP. musi być w tym samym folderze, co wszyscy, jeśli nie, po prostu zmień drogę
$ Dostawca4 \u003d MySQL_Query ("Wybierz Avatar od użytkowników, w których aktywacja \u003d" 0 "i UNIX_TIMESTAMP () - UNIX_TIMESTAMP (data)\u003e 3600); // Usuń awatary tych użytkowników, którzy nie aktywowali ich konta w ciągu godziny. Dlatego muszą zostać usunięte z podstawy, a także plików ich awatarów
Jeśli (MySQL_NUM_Rows ($ Rests4)\u003e 0) (
$ Myrow4 \u003d mysql_fetch_array ($ wyniku4);
zrobić.
{
// Usuń awatary w cyklu, jeśli nie są standardowe
Jeśli ($ Myrow4 ["Avatar"] \u003d\u003d "awatary / net-avatara.jpg") ($ a \u003d "nie rób nic";)
Inaczej (
UNLINK ($ Myrow4 ["Avatar"]); // Usuń plik
}
}
Podczas gdy ($ myrow4 \u003d mysql_fetch_array ($ wynikowy4));
}
MySQL_QUERY ("Usuń od użytkowników, w których aktywacja \u003d" 0 "i UNIX_TIMESTAMP () - UNIX_TIMESTAMP (data)\u003e 3600); // Usuń użytkowników z podstawy
Jeśli (ISSET ($ _ Pobierz ["Kod"])) ($ Code \u003d $ _ Get [Code "];) //kod potwierdzający
JESZCZE.
(Wyjdź ("Poszedłeś na stronę bez kodu potwierdzającego!");) // jeśli nie określonokod., a następnie wydasz błąd
Jeśli (Isset ($ _ Get ["Login"])) ($ Login \u003d $ _ Get ["Login"];) // logowanie do aktywacji
JESZCZE.
(Wyjdź ("Poszedłeś na stronę bez logowania!");) // Jeśli nie określisz loginu, podajemy błąd
$ Dess \u003d MySQL_Query ("Wybierz ID od użytkowników, w których logowanie \u003d" $ Login "", $ DB); // Usuń identyfikator użytkownika za pomocą tego logowania
$ Aktywacja \u003d Md5 ($ Myrow [ID "]). MD5 ($ Login); // Utwórz ten sam kod potwierdzenia
Jeśli ($ aktywacja \u003d\u003d $ Code) ( // porównuj wynikuRL. i wygenerowany kod
MySQL_QUERY ("Aktualizuj USTAWY USTAWY Aktywacja \u003d" 1 "Gdzie logowanie \u003d" $ Login "", $ DB); // jeśli jesteś równy, aktywuj użytkownika
Echo "Twoja wiadomość e-mail jest potwierdzona! Teraz możesz przejść do witryny pod logowaniem! Strona główna";
}
Else (echo "błąd! Twój e-mail nie jest potwierdzony! Home";
// jeśli wynikuRL. a wygenerowany kod nie jest równy, dajemy błąd
}
?>

Adres e-mail został potwierdzony, teraz wiemy, że ten adres jest własnością ten użytkownik.Możesz wysłać hasło do niego, jeśli użytkownik zapomni o tym lub innych powiadomień. Ale jaka jest różnica między aktywnymi użytkownikami, od nieaktywnianych? A te, a inni mogą udać się do witryny, musimy zatem ograniczyć dostęp do nieaktywnych. Otwórz plik testreg.. pHP. I dodaj jeszcze jeden warunek w zapytaniu do bazy danych:

$ Dess Dess \u003d MySQL_Query ("Wybierz * od użytkowników, w których logowanie \u003d" $ Login "i hasło \u003d" $ hasło "i aktywne \u003d" 1 "", $ DB); // Usuń wszystkie dane o użytkowniku z logowania z bazy danych.
// ukończyliśmy "I.aktywacja.\u003d "1", to znaczy użytkownik zostanie wyszukiwany tylko wśród aktywowanych. Wskazane jest dodanie tego warunku do innych podobnych kontroli danych użytkownika.

Jeśli użytkownik zapomni hasła, w takim przypadku musisz wycofać link do strona głównaDla których może go przywrócić, a także natychmiast umieścić pole wyboru, aby automatycznie login.

Automatyczne wejście.






Zarejestrować


Zapomniałeś hasła?

Jest link, ale nie ma pliku. Napiszmy wysłać._ przechodzić. pHP.. W nim poprosimy login użytkownika i adres e-mail. Jeśli wprowadzony e-mail i login znajduje się w bazie danych, wyślemy go do niego nowe hasłoJeśli użytkownik zapomniał o starym, ponieważ byliśmy przekonani podczas rejestracji, że adres e-mail jest ważny.

Jeśli (ISET ($ _ Post ["Login"])) ($ Login \u003d $ _POST ["Login"]; jeśli ($ Login \u003d\u003d "") (Unset ($ Login);)) // Wprowadzamy użytkownika wprowadzonego przez użytkownika w zmiennej $ Login, jeśli jest pusty, a następnie niszczymy zmienną
Jeśli (ISSET ($ _ Post ["Email"])) ($ Email \u003d $ _Post ["Email"]; jeśli ($ e-mail \u003d\u003d "") (Unset ($ e-mail);))))))))))))))) // weszliśmy do użytkownika e-mail wprowadzony przez użytkownika, jeśli jest pusty, a następnie niszczymy zmienną
Jeśli (Isset ($ Login) i Isset ($ Eail)) ( // jeśli są konieczne zmienne

Obejmują ("bd.php");

$ Dess \u003d MySQL_Query ("Wybierz ID od użytkowników, w którym logowanie \u003d" $ Login "i e-mail \u003d" $ e-mail "i aktywny \u003d" 1 "", $ DB); // takikłamstwow.użytkownikmI.- męski
$ myROW \u003d MySQL_Fetch_array ($ wynik);
Jeśli (pusty ($ Myrow ["ID]) lub Myrow $ [ID"] \u003d\u003d "") (
// Jeśli nie ma aktywowanego użytkownika z takim loginem i adresem e-mail
Wyjdź ("Użytkownik z taki adres e-mail nie został wykryty w dowolnej bazie danych CIA :) Strona główna");
}
// Jeśli użytkownik zostanie znaleziony z takim loginem i e-mailem, konieczne jest wygenerowanie losowego hasła, odśwież je w bazie danych i wyślij do wiadomości e-mail
$ DATENOW \u003d Data ("YMDHIS"); // Usuń datę
$ new_password \u003d MD5 ($ Datenow); // szyfruj datę
$ new_password \u003d substr ($ new_password, 2, 6); // Usuń 6 znaków z szyfru od drugiego. Będzie to nasze losowe hasło. Następnie piszemy go do bazy danych, szyfrowania tak samo jak zwykle.

$ new_password_sh \u003d strev (MD5 ($ new_password)). "B3P6F"; // zaszyfrowany
MySQL_QUERY ("UPDATE USTAWY USTAWY SET Password \u003d" $ new_password_sh "Gdzie login \u003d" $ Login "", $ DB); // zaktualizowanywbaza
// tworząc wiadomość

$ Message \u003d "Hello," $ Login. "! Wygenerowaliśmy dla Ciebie hasła, teraz możesz wprowadzić stronę CitName.ru, używając go. Po wejściu jest pożądane, aby go zmienić. Hasło: N." $ new_password; //Wiadomość tekstowa
Poczta ($ e-mail, "odzyskiwanie hasła", $ Message, "Typ treści: tekst / płaszczyzna; Charset \u003d Windows-1251 r n"); // wysłaćwiadomość

Echo " Twój e-mail wysłał list z hasłem. Zostaniesz przeniesiony po 5 sekundach. Jeśli nie chcesz czekać, kliknij tutaj. "; // przekieruj użytkownika
}
Inaczej ( // jeśli dane nie zostały jeszcze wprowadzone
Echo "


Zapomniałeś hasła?


Zapomniałeś hasła?



Wpisz swój login:



Wprowadź swój email:






";
}
?>

Następnie zrobimy automatyczne wejście. Będzie to działać: z dobrym wejściem z prasowanym pola wyboru w pliku cookie, Auto \u003d "Tak" będzie pasować. Jeśli serwer widzi, że w przeglądarce AUTO \u003d "Tak", rozpocznie sesję, a zmienne zajmie to samo, w pliku cookie. Następnie istnieje test uruchomienia sesji bazy danych.

otwarty testreg.. pHP. I dodaj kod po udanym wejściu:

Jeśli (Isset ($ _ Post ["Zapisz"])) (
// Jeśli użytkownik chce, aby jego dane były zachowane na kolejne wejście, trzymamy w plikach cookie z jego przeglądarki

Setcookie ("ID", $ Myrow ["ID"], czas () + 9999999);)
jeśli (Isset ($ _ Post ["Autovhod"])) (
// Jeśli użytkownik chce automatycznie wprowadzić witrynę
Setcookie ("auto", "tak", czas () + 9999999);
Setcookie ("login", $ _post ["login"], czas () + 9999999);
setcookie ("hasło", $ _post ["hasło"], czas () + 9999999);
Setcookie ("ID", $ Myrow ["ID"], czas () + 9999999);)

Teraz musisz rozpocząć sesję we właściwym miejscu, jeśli masz automatyczne wejście. otwarty index.php. I napisz na samym początku strony:

// Cała procedura działa na sesjach. Jest w tym, że dane użytkownika są przechowywane, gdy jest na miejscu. Bardzo ważne jest uruchomienie ich na samym początku strony !!!
session_start ();
Obejmują ("bd.php"); // plik bd.php powinien znajdować się w tym samym folderze, co wszyscy, jeśli nie, po prostu zmień drogę
Jeśli (Isset ($ _ Cookie ["Auto"]) i Isset ($ _ Cookie ["Login"]) i Isset ($ _ Cookie ["Hasło"])))))
{// jeśli to konieczne zmienne
Jeśli ($ _cookie ["auto"] \u003d\u003d "tak") ( // Jeśli użytkownik chce wprowadzić automatycznie, uruchom sesję
$ _SESSION ["Hasło"] \u003d Strev (MD5 ($ _ Cookie ["Hasło"])). "B3P6F"; // w plikach cookie hasło nie zostało zaszyfrowane, aw sesjach zwykle przechowywane są szyfrowane
$ _Session ["login"] \u003d $ _ Cookie ["Login"]; // sesjazzaloguj sie
$ _SESSION ["ID"] \u003d $ _ Cookie ["ID"]; //identyfikator użytkownika
}
}

Teraz nawet nie pomożemy wyjściowi, aby zmienić użytkownika! W wYJŚCIE. pHP. Sesje są usuwane, które są nadal tworzone indeks.. pHP.Dzięki cookies, które są przechowywane przez bardzo długi czas! Uzyskajmy plik wYJŚCIE. pHP.A następnie nie jest funkcjonalny w przypadku automatycznego logowania. Musimy po prostu usunąć automatyczne wejście plików cookie po usunięciu zmiennych z sesji:

Setcookie ("auto", "", czas () + 9999999); // Wyczyść automatyczne wejście

Musisz także dodać do aktualizacja._ użytkownik.. pHP. Po zaktualizowaniu logowania w sesji:

$ _SESSION ["Login"] \u003d $ Login; // Zaktualizuj logowanie do sesji
Jeśli (Isset ($ _ Cookie ["Login"])) (
Setcookie ("login", $ Login, Time () + 9999999); // Aktualizacjazaloguj siewkucharze.
}

I to samo z hasłem

$ RESSEL4 \u003d MySQL_QUERY ("UPDATE USTAWY USTAWY USTAWE HASŁO \u003d" $ HASŁO "Gdzie Login \u003d" $ old_login "", $ dB); // aktualizacjahasło
If ($ Dests4 \u003d\u003d "Prawda") ( // jeśli prawda, a następnie zaktualizuj go w sesji
$ _SESSION ["Hasło"] \u003d $ Hasło;
Jeśli (Isset ($ _ Cookie ["Hasło"])) (
Setcookie ("Hasło", $ _ Post ["Hasło"], czas () + 9999999); // Aktualizacjahasłowkucharze., jeślioni sąjest
}

Otóż \u200b\u200bto. Mam nadzieję, że odniesiesz sukces! Powodzenia!

Sesja - Jest to mechanizm, który umożliwia przechowywanie pewnych danych na serwerze unikalny dla każdego użytkownika. Szczególnie uważni czytelnicy znajdą podobieństwo ciastko. W ogóle jest to samo. Jednak kluczowy punkt: dane są przechowywane nie w przeglądarce użytkownika, ale w specjalnym pliku na serwerzektórego nazwa jest wyjątkowa dla każdego użytkownika. I wyjątkowy pHP sesji identyfikatora. już przechowywane B. ciastko.

Pozwólmy z tobą będziemy pracować z sesjami w PHP. I rozpocznijmy S. funkcje session_start (). Ta funkcja wykonuje: Jeśli użytkownik przyszedł pierwszy, a następnie tworzy unikalny identyfikator i pisze go ciastkoA także tworzy nowy plik, ponownie unikalny dla użytkownika. Jeśli już przyszedł użytkownik, serwer odczytuje wartość unikalnego identyfikatora ciastko I według niego odnosi się do pożądanego pliku sesji. Z tego pliku. PHP. Odczytuje wszystkie dane i umieszcza je w tablicy $ _SESSION.. Napiszmy prosty kod, w którym piszemy zmienną do sesji lub czytamy, jeśli został już zarejestrowany.

session_start ();
Jeśli (Isset ($ _ sesja ["Nazwa"])) $ Name \u003d $ _Session ["Nazwa"];
Inaczej $ _Session ["imię"] \u003d "15st";
Echo $ Nazwa;
?>

Najpierw nazywamy funkcja session_start ()Opisałem powyżej. Następnie sprawdź: czy jest zmienna " nazwa."W sesji. Jeśli jest, przeczytaj dane z niego i zapisujesz do zmiennej nazwa.. Jeśli nie ma (to znaczy, użytkownik przyszedł po raz pierwszy), a następnie ustaw zmienną " nazwa."W sesji sesji" 15.". Następny linia wyjściowa wartość zmiennej Nazwa $.. Oczywiście, kiedy po raz pierwszy zaczniesz, zobaczysz pusty ciąg, ale w sekundzie zobaczysz ciąg " 15."Znaleziono z sesji.

Radzę teraz wejść do paska adresu: " javaScript: Dokument.cookie."(Wpisz na tej samej karcie, który został uruchomiony skrypt). W rezultacie zobaczysz o następujących kwestiach:" Phpsesid \u003d.". Tylko wartość Phpsesid. I to jest unikalny identyfikator.

I że wszystko staje się całkowicie jasne, radzę nawet znaleźć plik sesji.. Jeśli używasz Denwer., a następnie leży w folderze " tMP."Spójrz na pliki, które zaczynają" sess_"- to jest to samo pliki sesji.. Możesz je otworzyć w prostym notebooku.

Kolejna bardzo ważna nieruchomość jest sesje w php.. A następnie, jeśli ciastko Sklepy, aż przeglądarka je usunie. A przeglądarka nie usuwa ich domyślnie. Następnie sesje są przechowywane w określonym czasie ustawienia PHP.. Domyślnie jest 15 minuty. To jest, jeśli używasz uwierzytelnianie oparte na sesji, potem po 15 minutach bezczynność Użytkownik, ponownie będzie musiał się zalogować. Oczywiście to jest dobre, ponieważ jeśli użytkownik zapomina " Wychodzić", nie wydarzy się nic złego. Atakujący nie będzie mógł korzystać z konta użytkownika. Co więcej, użyj pliku cookie. Mogą być namalowane, substytutu w przeglądarce, w wyniku czego napastnik jest autoryzowany pod obcych, a nie wiedząc nawet hasła. A sesja nie może ukraść, ponieważ wszystkie parametry są przechowywane na serwerze, a nie będziesz pracować na nich.

Więc spróbuj głównie w swojej praktyce użyj sesji., nieczysty ciastko.

I wreszcie, chcę ostrzec się bardzo błąd ramki. Nigdy nie wysyłaj danych do przeglądarek korzystanie z funkcji session_start ()W przeciwnym razie da błąd. Oznacza to, że nie można tego pisać:

Echo "cześć";
session_start ();
?>

Po uruchomieniu tego skryptu wystąpi błąd. Ta sama reguła była ważna ciastko (funkcja Setcookie ()). Myślę, że wszystko jest tutaj jasne.

Jakie obawy sesje w PHP.To oczywiście można wykorzystać do przechowywania danych dotyczących statystyk, uwierzytelniania, osobistych ustawień użytkownika i innych podobnych rzeczy.

Nauczy się uwierzytelnianie prostych użytkowników na stronie. Na stronie mogą pojawić się strony tylko dla autoryzowanych użytkowników i w pełni funkcjonują, jeśli dodasz do nich nasz blok uwierzytelniania. Aby go utworzyć, potrzebujesz bazy danych MySQL. Może mieć 5 kolumn (minimum), a może więcej, jeśli chcesz dodać informacje o użytkownikach. Nazywamy bazy danych "Userauth".

Utwórz w nim następujące pola: ID dla liczby użytkowników, UID dla unikalnego numeru identyfikacyjnego użytkownika, nazwa użytkownika dla nazwy użytkownika, e-mail na adres na adres e-mail I hasło do hasła. Możesz użyć do autoryzacji użytkownika i już istniejącej bazy danych, tylko w przypadku nowej bazy danych, utwórz w nim poniższą tabelę.

Kod MySQL.

Utwórz tabelę "Użytkownicy" (ID "Int (11) nie null Auto_increment,` Uid` int (11) Nie Null, `Nazwa użytkownika Tekst nie Null,` Email` Nie , `Password` Tekst nie Null, klucz podstawowy ( `ID`)) Silnik \u003d Domyślny zestaw myisamowy \u003d UTF8 Auto_increment \u003d 1;

Teraz utworzyć plik "sql.php". Odpowiada za połączenie z bazą danych. Ten kod, najpierw tworzy zmienne dla serwera i użytkownika, gdy łączy się z serwerem. Po drugie, wybierze bazy danych w tym przypadku "Userauth". Ten plik musi być podłączony do "log.php" i "reg.php", aby uzyskać dostęp do bazy danych.

Kod PHP.

// Twoja nazwa użytkownika MySQL $ Pass \u003d "Przeprowadzaj"; // hasło $ conn \u003d mysql_connect ($ server, $ user, $ Pass); // połączenie z serwerem $ db \u003d mysql_select_db ("userauth", $ Conn); // Wybierz bazę danych Jeśli (! $ dB) ( // Jeśli nie możesz wybrać bazy danych Echo "przepraszam, błąd: (/\u003e"; // przedstawia komunikat o błędzie Wyjście (); // pozwala pracować z resztą skryptów PHP } ?>

Następna strona wejścia, niech nazywa się "login.php". Po pierwsze, sprawdza wprowadzone dane dotyczące błędów. Strona ma pola dla nazwy użytkownika, hasła, przycisku Wyślij i link do rejestracji. Gdy użytkownik kliknie przycisk "Login", formularz zostanie przetworzony kodem z pliku "Log.php", a następnie zaloguj się do systemu.

Kod PHP.

0) { // jeśli występują błędy sesji $ err \u003d "

"; // Uruchom tabelę Foreach ($ _Session [" Errmsg "] jako MSG $) ( // Rozpoznawanie każdego błędu $ Err. \u003d " "; // Nagraj go w zmiennej ) $ Err. \u003d "
"MSG $".
"; // zamknięcie stołu Nieznacznie ($ _Session ["errmsg"]); // Usuń sesję. } ?> Forma loginu
Nazwa Użytkownika
Hasło
Zameldować się

Następnie piszemy skrypt, aby się zalogować. Nazwijmy to "log.php". Posiada funkcję do czyszczenia danych wejściowych z zastrzyków SQL, które można zepsuć skrypt. Po drugie, otrzymuje te formy i sprawdza je na poprawność. Jeśli dane wejściowe są poprawne, skrypt wysyła użytkownika na stronie autoryzowanych użytkowników, jeśli nie, ustawia błędy i wysyła użytkownika na stronę logowania.

Kod PHP.

// start sesja do nagrywania Funkcja Fix ($ STR) (// Czyszczenie $ Str \u003d Fields Tim ($ STR); If (Get_magic_quotes_GPC () ($ ST \u003d stripslashes ($ ST);) // tablica do oszczędzania błędów $ erflag \u003d false; // Flaga błędu $ Nazwa użytkownika \u003d Fix ($ _ Post ["Nazwa użytkownika"]); //Nazwa Użytkownika $ Hasło \u003d Napraw ($ _ Post ["Hasło"]); // Hasło) // Sprawdzanie hasła. Jeśli ($ hasło \u003d\u003d "") ($ errmsg \u003d "Brak hasła"; // błąd $ Erflag \u003d true; // podnosi flagę w przypadku błędu) // Jeśli flaga błędu zostanie podniesiona, wysyła z powrotem do formularza rejestracyjnego // zapisuje błędy session_write_close (); // sesja zamykająca // przekierowanie Wyjście (); ) // Żądanie bazy danych. $ Qry \u003d "Wybierz * od użytkowników` gdzie` Nazwa użytkownika` \u003d "$ Nazwa użytkownika" i` hasło` \u003d "". MD5 ($ Hasło). "" "; $ wynik \u003d mysql_query ($ qry); // Sprawdź, czy wniosek odniósł sukces (istnieje dane na nim) IF (MySQL_NUM_ROWS ($ Wynik) \u003d\u003d 1) (While ($ Row \u003d MySQL_Fetch_assoc ($ Wynik)) ($ _Session ["UID"] \u003d $ rzędu ["UID"]; // Otrzymuj UID z bazy danych i umieść go na sesji $ _Session ["nazwa użytkownika"] \u003d nazwa użytkownika $; // ustawia, czy nazwa użytkownika zbiega się z sesją session_write_close (); // sesja zamykająca Nagłówek ("Lokalizacja: członek.php"); // przekierowanie )) Inna ($ _Session ["Errmsg"] \u003d "Nieprawidłowa nazwa użytkownika lub hasło"; // błąd session_write_close (); // sesja zamykająca Nagłówek ("Lokalizacja: login.php"); // przekierowanie Wyjście (); )?\u003e.

Zróbmy stronę rejestracji, zadzwoń do tego "Zarejestruj się.php". Wygląda na stronę logowania, ma tylko kilka pól więcej, a zamiast rejestracji - link do logowania.php na wypadek, gdyby użytkownik ma konto.

Kod PHP.

0) { // jeśli występują błędy sesji $ err \u003d "

"// Uruchom tabelę Foreach ($ _Session [" Errmsg "] jako MSG $) ( // Ustawia każdy błąd $ Err. \u003d " "; // zapisuje je do zmiennej ) $ Err. \u003d "
"MSG $".
"; // koniec nieustartowej tabeli ($ _Session [" Errmsg "]); // niszczy sesję } ?> Formularz rejestracyjny
Nazwa Użytkownika
E-mail
Hasło
Powtórz hasło
Mam konto

Teraz wykonamy skrypt rejestracyjny w pliku "Reg.php". Zostanie on włączony "sql.php", aby połączyć się z bazą danych. Ta sama funkcja jest również używana, jak w skrypcie wejściowym, aby wyczyścić pole wejściowe. Zainstalowane zmienne możliwe błędy. Następnie - funkcja tworzenia unikalnego identyfikatora, który nigdy wcześniej nie został dostarczony. Następnie zostaną pobrane dane z formularza rejestracyjnego i sprawdzone. Sprawdzanie, czy adres e-mail jest określony niezbędny format.Jak również, czy hasło jest poprawnie określone prawidłowo. Następnie skrypt sprawdza, czy baza danych użytkownika jest z taką samą nazwą, a jeśli występuje raporty o błędzie. I wreszcie kod dodaje użytkownika do bazy danych.

Kod PHP.

// start sesja do nagrywania Funkcja Fix ($ STR) (// Cleaning Field $ $ Str \u003d @trim ($ STR); jeśli (Get_magic_quotes_GPC () ($ Str \u003d Stripslashes ($ STR);) powrót mysql_real_escape_string.($ Str); ) $ errmsg \u003d tablica (); // tablica do przechowywania błędów $ erflag \u003d false; // Błąd flagi $ UID \u003d "1232354353452345345146545454"; // Unikalny identyfikator $ Nazwa użytkownika \u003d Fix ($ _ Post ["Nazwa użytkownika"]); //Nazwa Użytkownika $ e-mail \u003d $ _Post ["Email"]; // Email $ Hasło \u003d Napraw ($ _ Post ["Hasło"]); // hasło $ rPpassword \u003d Fix ($ _ Post ["rPpassword"]); // Powtórz hasło // Sprawdź nazwę użytkownika Jeśli ($ username \u003d\u003d "") ($ errmsg \u003d "Brak nazwy użytkownika"; // błąd $ Erflag \u003d true; // podnosi flagę w przypadku błędu ) // Sprawdź e-maila, jeśli (! EREGI ("^ [_ A-Z0-9 -] + ([_ A-Z0-9 -] +) * @ + (. +) * (. (2.3 )) $ ", $ e-mail)) (// musi być zgodny z formatem: [Chroniony e-mail] $ errmsg \u003d "Nieprawidłowy e-mail"; // błąd $ errflag \u003d true; // podnosi flagę w przypadku błędu } // Sprawdzanie hasła. Jeśli ($ hasło \u003d\u003d "") ($ errmsg \u003d "Brak hasła"; // Błąd $ Erflag \u003d true; // podnosi flagę w przypadku błędu } // Sprawdzanie powtarzania hasła Jeśli ($ rPpassword \u003d\u003d "") ($ errmsg \u003d "Brakujące hasło powtarzające się"; // błąd $ errflag \u003d true; // podnosi flagę w przypadku błędu } // Walidacja hasła Jeśli (STRCMP ($ Hasło, $ rPpassword)! \u003d 0) ($ errmsg \u003d "Hasła nie pasują do"; // błąd $ Erflag \u003d true; // podnosi flagę w przypadku błędu } // Sprawdź, czy nazwa użytkownika jest bezpłatna Jeśli ($ username! \u003d "") ($ Qry \u003d "Wybierz * od" Użytkownicy`, gdzie "Nazwa użytkownika" \u003d "$ Nazwa użytkownika" "; // Żądanie do MySQL $ Result \u003d MySQL_Query ($ Qry); (jeśli (MySQL_NUM_ROWS ($ Wynik)\u003e 0) ( // jeśli nazwa jest już używana $ errmsg \u003d "nazwa użytkownika już używana"; // Komunikat o błędzie $ Errflag \u003d prawda; // podnosi flagę w przypadku błędu ) mysql_free_result ($ wynik); )) // Jeśli dane nie przeszły walidacji, kieruje się z powrotem do formularza rejestracyjnego Jeśli ($ Erflag) ($ _Session ["Errmsg"] \u003d $ Errmsg; // Komunikat o błędzie session_write_close (); // sesja zamykająca Nagłówek ("Lokalizacja: zarejestruj się.php"); // przekierowanie Wyjście (); ) // Dodawanie danych do bazy danych $ Qry \u003d "Wstaw do" userauth ".sers` (`UID`,` Nazwa użytkownika`, `Email`,` Hasło`) ". MD5 ($ Hasło)." ")"; $ wynik \u003d mysql_query ($ qry); // Sprawdź, czy udane prośba o dodanie Jeśli ($ wynik) (echo "Dziękujemy za rejestrację" Nazwa użytkownika $. " tutaj"; Wyjdź ();) inaczej (umrzeć (" Błąd, patrz później ");)?\u003e

Nadal musisz wykonać skrypt, aby wyjść z użytkownika z systemu. Zatrzymuje sesję użytkownika z tym unikalnym identyfikatorem i nazwą, a następnie przekierowuje użytkownika na stronie logowania.

Kod PHP.

Wreszcie skrypt "Auth.php" może być używany do udostępniania stron tylko dla autoryzowanych użytkowników. Sprawdza dane wejściowe i, jeśli są poprawne, umożliwia użytkownikowi przeglądanie stron, a jeśli nie, prosi o zalogowanie się. Ponadto, jeśli ktoś próbuje włamać się do witryny, tworząc jedną z sesji, zostanie przerwany jako ogólnie.

Kod PHP.

Jednym z warunków w powyższym kodzie jest przedmiotem pytania.

Poniższy kod musi być włożony do strony dla autoryzowanych użytkowników, nazywa się, na przykład "członek.php", a możesz zostać wywołany, jak chcesz.

Kod PHP.

Masz dostęp do tej strony. Wychodzić ( )

Uwierzytelnianie użytkownika jest gotowe!

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu