Laboratorium 4 sesje i logowanie

Podobne dokumenty
Baza danych do przechowywania użytkowników

Rejestracja i Logowania - PHP/MySQL

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Aplikacje internetowe - laboratorium

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

Przekazywanie danych. Dane zewnętrzne mogą pochodzić z róŝnych źródeł:

Wykład 5: PHP: praca z bazą danych MySQL

Wysyłanie pliku na serwer. Plik na serwerze.

Aplikacje WWW - laboratorium

0.1 Logowanie do serwisu

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Internetowe bazy danych

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Wprowadzenie do Internetu Zajęcia 5

INSTRUKCJA UŻYTKOWANIA STRONY DLA PODSTAWOWEGO UŻYTKOWNIKA

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Laboratorium 7 Blog: dodawanie i edycja wpisów

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Bazy danych w PHP dla początkujących

Podstawy technologii WWW

Politechnika Częstochowska. Projektowanie systemów użytkowych II

Projekt strony internetowej firmy organizującej przyjęcia

Liczniki odwiedzin. Licznik odwiedzin na plikach

Autor: Joanna Karwowska

Aplikacje internetowe

Zajęcia 10 obsługa formularzy w PHP

Praca w systemie WET SYSTEMS

Skrócona instrukcja obsługi programu. Mediamanager

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Sesje i logowanie. 1. Wprowadzenie

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Wprowadzenie do Doctrine ORM

Podstawowe wykorzystanie Hibernate

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Języki programowania wysokiego poziomu. Blog

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Języki programowania wysokiego poziomu. Ćwiczenia

Instrukcja użytkownika

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Instrukcja obsługi Uczeń. Spis Treści

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Projekt z przedmiotu Projektowanie systemów teleinformatycznych

Serwery aplikacji. dr Radosław Matusik. radmat

Instrukcja zarządzania kontem jednostki samorządu terytorialnego w serwisie internetowym

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

III. Opis działania systemu

Laboratorium 1 Wprowadzenie do PHP

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2016

Opis systemu lojalnościowego e-lar bank.

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Języki programowania wysokiego poziomu. Forum

Platforma e-learningowa

Dokumentacja smsapi wersja 1.4

KatMPBSoft - 1 -

Platforma e-learningowa

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

Skrócona instrukcja pracy z Generatorem Wniosków

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Instrukcja dla Kandydatów na staż w Projekcie SIMS

Platforma zakupowa GRUPY TAURON

Internetowe bazy danych

Dokumentacja serwisu internetowego Zespołu Szkół Technicznych w Radomiu.

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2

Wykład 5. SQL praca z tabelami 2

1. Rejestracja / Logowanie

6. Bezpieczeństwo przy współpracy z bazami danych

E-commerce. Genialnie proste tworzenie serwisów w PHP i MySQL.

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Serwis jest dostępny w internecie pod adresem Rysunek 1: Strona startowa solidnego serwisu

Wikispaces materiały szkoleniowe

Ten krótki poradnik pomoże Ci zainstalować nasz katalog no-name na swojej stronie internetowej.

Systemy internetowe Wykład 3 PHP

Technologie Internetowe Raport z wykonanego projektu Temat: Internetowy sklep elektroniczny

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

14. POZOSTAŁE CIEKAWE FUNKCJE

4. Projekt Bazy Danych

Ćwiczenie: JavaScript Cookies (3x45 minut)

REDIVE PRZEWODNIK PO PLATFORMIE LMS

Wdrożenie modułu płatności eservice. dla systemu Magento

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

PHP: bazy danych, SQL, AJAX i JSON

Zajęcia 11 wykorzystanie MySQL w PHP

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Cookie Policy. 1. Informacje ogólne.

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Przewodnik użytkownika Bazy Ogłoszeń

Instrukcja obsługi dla Wnioskodawcy

Dokumentacja Techniczna SMS MO

Podręcznik Użytkownika LSI WRPO

Bazy danych. dr Radosław Matusik. radmat

Transkrypt:

Laboratorium 4 sesje i logowanie Pewnie nie jeden z webmasterów zastanawiał się nad ograniczeniem dostępu do swojej strony lub do kilku jej podstron, tak, aby były one widoczne tylko dla zarejestrowanych użytkowników. Na pierwszy rzut oka może wydawać się to bardzo pracochłonne i skomplikowane, ale tak naprawdę to kilka prostych skryptów. Na podstawie prostej strony postaram się przedstawić i wyjaśnić zasady działania systemu logowania i rejestracja na stronie www. Sesje System logowania i rejestracji będzie opierał się na tzw. sesjach. Sesja to czas, w którym użytkownik przegląda witrynę internetową. W PHP to obiekt, który może zawierać dane dotyczące użytkownika. Najważniejsza dana, określana jako PHPSESSID, to unikalny ciąg znaków, który wysyłany jest do przeglądarki użytkownika i zapisywany na dysku w postaci ciasteczka. Dzięki sesjom możemy dowiedzieć się, jakie podstrony naszej witryny były otwierane przez użytkownika, jak długo je przeglądał itp. O funkcjach obsługujących sesje dowiemy się z dalszej części artykułu. Utworzenie bazy danych. Dane o loginach oraz hasłach zarejestrowanych użytkowników najlepiej przechowywać w bazie danych MySQL dzięki czemu w łatwy sposób będzie można edytować rekordy bądź je usuwać. Więc utwórzmy tabele o nazwie users. Nasza tabela powinna się składać z co najmniej 3 kolumn: user_id(int), user_login(varchar(30)) oraz user_haslo(varchar(30)). Tabelę tworzymy poprzez zapytanie do bazy danych: CREATE TABLE `users` ( `user_id` INT NOT NULL AUTO_INCREMENT, `user_login` VARCHAR( 30 ), `user_haslo` VARCHAR( 30 ), PRIMARY KEY ( `user_id` ) ); Wartość w kolumnie user_id będzie wzrastać o jeden przy każdym dodaniu rekordu do bazy, co uniemożliwi powtórzenie się dwóch tych samych identyfikatorów. Formularz rejestracyjny Jeśli chcemy aby nasi użytkownicy mogli się sami zarejestrować, musimy stworzyć im formularz rejestracyjny. Oto gotowy kod, który zapiszemy jako rejestruj.php: mysql_connect("localhost", "root", "")or die("nie można nawiązać połączenia z bazą"); //połączenie z bazą danych mysql_select_db("test")or die("wystąpił błąd podczas wybierania bazy danych"); function ShowForm($komunikat=""){ //funkcja wyświetlająca formularz rejestracyjny echo "$komunikat<br>"; echo "<form action='rejestruj.php' method=post>"; echo "Login: <input type=text name=login><br>"; echo "Hasło: <input type=text name=haslo><br>"; echo "<input type=hidden value='1' name=send>";

echo "<input type=submit value='zarejestruj mnie'>"; echo "</form>"; <title>formularz rejestracyjny</title> if($_post["send"]==1){ //sprawdzanie czy formularz został wysłany if(!empty($_post["login"]) &&!empty($_post["haslo"])){ //oraz czy uzupełniono wszystkie dane if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($_post["login"]."'"))))showform("użytkownik o podanym loginie już istnieje!!!"); // sprawdzanie czy użytkownik o podanej nazwie już istnieje else{ mysql_query("insert into users values(null, '".htmlspecialchars($_post["login"])."', '".htmlspecialchars($_post["haslo"])."')"); // zapisywanie rekordu do bazy echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować."; else ShowForm("Nie uzupełniono wszystkich pól!!!"); else ShowForm(); mysql_close(); //zamykanie połączenia z bazą Myślę że kod jest dość zrozumiały, w celu ułatwienia zrozumienia dodałem komentarze. W razie problemów odsyłam do kursów na tej stronie. Powiem tylko, że kod ma za zadanie wyświetlić formularz rejestracyjny, lub dodać dane do bazy danych, po uprzednim ich sprawdzeniu. Strona główna serwisu Po napisaniu formularza rejestracyjnego możemy przystąpić do napisania kodu źródłowego strony głównej. Oto kod: session_start(); session_register("zalogowany"); if(empty($_session["zalogowany"]))$_session["zalogowany"]=0; mysql_connect("localhost", "root", "")or die("nie można nawiązać połączenia z bazą"); mysql_select_db("test")or die("wystąpił błąd podczas wybierania bazy danych"); function ShowLogin($komunikat=""){ echo "$komunikat<br>"; echo "<form action='index.php' method=post>"; echo "Login: <input type=text name=login><br>"; echo "Hasło: <input type=text name=haslo><br>"; echo "<input type=submit value='zaloguj!'>";

echo "</form>"; echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>"; <title>strona główna</title> if($_get["wyloguj"]=="tak"){$_session["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu"; if($_session["zalogowany"]!=1){ if(!empty($_post["login"]) &&!empty($_post["haslo"])){ if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_post["login"])."' AND user_haslo = '".htmlspecialchars($_post["haslo"])."'"))){ echo "Zalogowano poprawnie. <a href='index.php'>przejdź na stronę główną</a>"; $_SESSION["zalogowany"]=1; else echo ShowLogin("Podano złe dane!!!"); else ShowLogin(); else{ Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a> <br><a href='index.php?wyloguj=tak'>wyloguj się</a> mysql_close(); Na początku pliku widzimy funkcję session_start(). Ma ona za zadanie utworzenie nowej sesji lub wznowienie już istniejącej. Nie jest ona wymagana w najnowszych wersjach PHP, jednak dla porządku proponuję ją umieszczać. Powinna ona się znajdować na początku pliku. Kolejna linijka to kolejna nowa funkcja dotycząca sesji. session_register() rejestruje w bieżącej sesji zmienną o nazwie podanej w argumencie funkcji. W zmiennej tej będziemy mogli przechowywać np. informacje o tym, czy użytkownik będący na naszej stronie jest aktualnie zalogowany. Aby odwołać się do tej zmiennej, należy skorzystać z tablicy, której zmienna jest jednym z jej elementów. Tablica nosi nazwę $_SESSION, tak więc jeśli chcemy odwołać do zmiennej zalogowany skorzystamy z zapisu: $_SESSION["zalogowany"]. Linijka: if(empty($_session["zalogowany"]))$_session["zalogowany"]=0; sprawdza czy zmienna sesyjna zalogowany jest pusta, jeśli tak, przypisuje jej wartość 0. Później następuje połączenie z bazą danych. Jest też definicja funkcji ShowLogin, która wyświetla

formularz logowania. Omówię jeszcze procedurę logowania do strony. Najpierw sprawdzamy czy użytkownik jest zalogowany. Jeśli tak, wyświetlamy odpowiedni tekst, który chcemy żeby był widoczny tylko do zalogowanych użytkowników. Jeśli nie jest zalogowany, sprawdzamy, czy formularz w ogóle został wysłany. Jeśli nie, wyświetlamy go za pomocą funkcji ShowLogin(), natomiast jeśli został wysłany, poprzez zapytanie do bazy danych sprawdzamy czy istnieje użytkownik o podanym loginie i haśle. Sprawdzamy to za pomocą funkcji mysql_num_rows(), która ma za zadanie zwrócić ilość wyników zwróconych przez bazę po zapytaniu. Jeśli funkcja zwróci wartość różną od zera, użytkownik zostanie zalogowany. W przeciwnym razie zostanie wywołana funkcja ShowLogin() z odpowiednim argumentem. Aby użytkownik mógł się wylogować, przygotowałem specjalny link służący do tego. Odsyłacz wygląda tak: <a href='index.php?wyloguj=tak'>wyloguj się</a> Jak widać przekazywana jest też w nim zmienna wyloguj. Potrzebna ona będzie do sprawdzenia warunku: if($_get["wyloguj"]=="tak"){$_session["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu"; Jeśli zmienna wyloguj ma wartość "tak" zmiennej sesyjnej zalogowany przypisujemy wartość 0. Przykładowa strona Jak na razie stworzyliśmy system logowania dla jednej podstrony (dla index). Ale co jeśli nasza strona będzie składała się z wielu podstron? Należy napisać skrypt, który będzie sprawdzał czy użytkownik jest zalogowany Żeby nie powtarzać tego samego kodu, zapiszemy go do jednego pliku (np. check.php), a następnie za pomocą funkcji require() dołączymy go do plików, które powinny być zabezpieczone przed niezalogowanymi internautami. Oto kod znajdujący się w pliku stronka.php: session_start(); <title>podstrona</title> if($_session["zalogowany"]==0){echo "nie masz dostępu do tej części witryny. <a href='index.php'>zaloguj się</a>;"; exit(); Na początku wpisaliśmy znaną nam już funkcje session_start(), która przypomnę ma za zadanie rozpoczynać lub wznawiać bieżącą sesje. Plik nie jest długi, ale ważna jest tam ta linijka: if($_session["zalogowany"]!=1){echo "nie masz dostępu do tej części witryny. <a

href='index.php'>zaloguj się</a>;"; exit(); Ma ona za zadanie sprawdzić czy użytkownik jest zalogowany - jeśli tak, to jest wyświetlana zawartość pliku, który dołącza plik check.php, jeśli jednak okaże się, że użytkownik nie jest zalogowany, wyświetlamy stosowny komunikat oraz kończymy wykonywanie skryptu za pomocą funkcji exit(). A oto nasza przykładowa strona: require("check.php"); to treść strony do której mają dostęp tylko zalogowani użytkownicy, między innymi ty:p <br><a href='index.php?wyloguj=tak'>wyloguj się</a> Na początku dołączamy wspominany wyżej plik. Należy zwrócić uwagę na to, żeby nie pisać nagłówka dokumentu HTML, gdyż jest on już napisany w pliku check.php. Należy umieścić tylko stopkę. Przykłady innych funkcji związanych z sesjami w PHP Oprócz znanych już funkcji session_start() oraz session_register() istnieje jeszcze kilka innych funkcji powiązanych z sesjami. Tutaj opiszę kilka z nich: session_id() - Jeśli nie podany zostanie argument, funkcja zwróci klucz, który określa sesje, a jeśli do funkcji podano jakiś argument, funkcja ustawi identyfikator sesji na tę wartość. session_unregister() - funkcja ma za zadanie wyrejestrować wcześniej zarejestrowaną zmienną funkcją session_register. Argumentem funkcji jest nazwa zmiennej. Od tej pory zmienna nie będzie już przesyłana między stronami. session_save_path() - jeśli zostanie podany argument, funkcja ustawi ścieżkę do katalogu, w którym zapisywane będą wartości zmiennych sesji. Jeśli nie argument nie zostanie podany, funkcja zwróci ścieżkę do katalogu. session_is_registered() - argumentem funkcji jest nazwa zmiennej. Funkcja sprawdza czy zmienna o podanej nazwie jest zarejestrowana, jeśli tak zwraca wartość TRUE, jeśli nie FALSE. session_encode() - zwraca zakodowany ciąg zawierający stan bieżącej sesji. session_decode() - pobiera ciąg zakodowany funkcją session_encode() i odtwarza stan sesji. session_destroy() - funkcja usuwa wszystkie dane o sesji Źródło: Marcin 'loganek' Kolny http://webmade.org/porady/sesje-php-system-logowania.php