Ćwiczenie laboratoryjne. Komunikacja z serwerem w języku PHP

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

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

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

Aplikacje internetowe - laboratorium

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

Aplikacje WWW - laboratorium

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

Laboratorium 1 Wprowadzenie do PHP

Systemy internetowe Wykład 3 PHP

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

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

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

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

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Wprowadzenie do Internetu Zajęcia 5

Ćwiczenie: JavaScript Cookies (3x45 minut)

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

PHP5. Praktyczny kurs

Internetowe bazy danych

Zajęcia 10 obsługa formularzy w PHP

Serwery aplikacji. dr Radosław Matusik. radmat

Przewodnik użytkownika (instrukcja) AutoMagicTest

Przykładowa integracja systemu Transferuj.pl

Aplikacje internetowe

Zmienne i stałe w PHP

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Internetowe bazy danych

Aplikacje WWW - laboratorium

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Formularze Pobierają dane od użytkownika strony i wysyłają je do przetworzenia na serwerze (gdzie potrzebne są skrypty,któredaneprzetworzą najczęściej

Przykładowa integracja systemu tpay.com KIP S.A. ul. Św. Marcin 73/ Poznań.

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Sprawozdanie nr 4. Ewa Wojtanowska

Przewodnik użytkownika (instrukcja) AutoMagicTest

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Instrukcja logowania i realizacji podstawowych transakcji w systemie bankowości internetowej dla klientów biznesowych BusinessPro.

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

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

Przewodnik użytkownika (instrukcja) AutoMagicTest Spis treści

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

Dokumentacja smsapi wersja 1.4

Bazy Danych i Usługi Sieciowe

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4

Instrukcja konfiguracji funkcji skanowania

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE

Baza danych do przechowywania użytkowników

SMS Kod Automatyczny

Cookie Policy. 1. Informacje ogólne.

Wykład 03 JavaScript. Michał Drabik

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

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Defekty Mr Buggy 4. Znane, nieznane i literówki (wybrane)

Wysyłanie pliku na serwer. Plik na serwerze.

INSTALACJA I KONFIGURACJA SERWERA PHP.

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Instrukcja logowania do systemu e-bank EBS

INSTRUKCJA obsługi certyfikatów

Gatesms.eu Mobilne Rozwiązania dla biznesu

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Podstawy JavaScript ćwiczenia

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

SMS Kod Automatyczny

I.Wojnicki, Tech.Inter.

INSTRUKCJE WIKAMP Dotyczy wersji systemu z dnia

Certyfikat niekwalifikowany zaufany Certum Silver. Instalacja i użytkowanie pod Windows Vista. wersja 1.0 UNIZETO TECHNOLOGIES SA

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Laboratorium 7 Blog: dodawanie i edycja wpisów

Bazy danych i strony WWW

Dokumentacja modułu Woocommerce

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Dokument hipertekstowy

SSK - Techniki Internetowe

Programowanie internetowe

Certyfikat niekwalifikowany zaufany Certum Silver. Instrukcja dla uŝytkowników Windows Vista. wersja 1.1 UNIZETO TECHNOLOGIES SA

SZCZEGÓŁOWY OPIS SPOSOBU DOSTĘPU DO INFORMACJI I DANYCH ZAWARTYCH W RAPORTACH SKŁADANYCH DO KRAJOWEJ BAZY DLA GIOŚ I WIOŚ

PHP: bloki kodu, tablice, obiekty i formularze


Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

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

Autor: Joanna Karwowska

Serwis realizuje funkcje pozyskiwania informacji o użytkownikach i ich zachowaniach w następujący sposób:

ArtPlayer oprogramowanie do odtwarzania plików video sterowane Artnet/DMX V1.0.1

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

Instrukcja dla użytkowników Windows Vista Certyfikat Certum Basic ID

Podstawowe wykorzystanie Hibernate

DOKUMENTACJA TECHNICZNA SMS API MT

Certyfikat Certum Basic ID. Instrukcja dla użytkowników Windows Vista. wersja 1.3 UNIZETO TECHNOLOGIES SA

Aplikacje WWW - laboratorium

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Instrukcja wgrywania Certyfikatu Klienta do przeglądarki Mozilla Firefox. System Bankowości Internetowej KIRI BS 2012

Instrukcja korzystania z systemu poczty NetMail (wersja skrócona)

Aplikacje WWW - laboratorium

Informujemy, iż wszystkie dane są gromadzone jedynie za Państwa przyzwoleniem.

Polityka bezpieczeństwa.

Transkrypt:

Ćwiczenie laboratoryjne Tematy ćwiczenia przesyłanie na serwer danych i plików, odnośniki. ciasteczka (cookies), sesja. Komunikacja z serwerem w języku PHP Sprawozdanie Na każdym zajęciu laboratoryjnym sporządza się za pomocą edytora Word sprawozdanie na bazie materiałów ćwiczenia. Bazowa zawartość sprawozdania musi być przygotowana w domu przed ćwiczeniem. W czasie ćwiczenia do sprawozdania są dodawane wyniki testowania. Treść sprawozdania: strona tytułowa, spis treści sporządzony za pomocą Word'a, dla każdego punktu rozdziały " ", "" (rozdział ze skryptem i komentarzami), "" (rozdział z opisem danych wejściowych i wynikami testowania, w tym zrzuty okna przeglądarki). Wzorzec strony tytułowej znajduje się w pliku Strona_tytulowa_niestac_Interpr_jezyki_progr.doc. Nazwa pliku ze sprawozdaniem musi zawierać skrót "IJP_", numer ćwiczenia i nazwisko studenta (bez polskich liter, żeby można było archiwizować). Pliki ze sprawozdaniem są przekazywane do archiwum grupy. Wyniki opracowania zadań pokazywać za pomocą przeglądarek: Firefox Mozilla, Internet Explorer, Google Chrome lub Opera. W przypadku stosowania Firefox Mozilla używać konsoli błędów (Narzędzia/Konsola błędów). a) Przesyłanie danych klienta Stworzyć formularz po stronie klienta do wprowadzenia imienia i nazwiska. Przyjmować i wyświetlać te dane po stronie serwera.

b) Przesyłanie plików klienta Dopełnić formularz klienta możliwością wysyłania plików. Przyjmować i zapisywać do folderu DANE wysłane pliki. c) Odnośniki Wysłać na serwer identyfikator użytkownika przez odnośnik. Wyświetlić te dane po stronie serwera. d) Ciasteczka Stworzyć formularz po stronie klienta do wprowadzenia identyfikatora i zasłoniętego hasła. Zapisać w ciasteczkach przy pierwszym wywołaniu strony wysłane na serwer identyfikator i hasło. Przy nowym odwiedzeniu strony porównywać nowo wprowadzone identyfikator i hasło z zawartością ciasteczek i wydawać odpowiednie komunikaty. e) Sesja Liczyć i wyświetlać ilość odwiedzin strony.

Wskazówki Formularze Formularz na stronie klienta (lub serwera) jest zapisywany w znaczniku <form>. Dodatkowo zawartość formularza musi być ograniczona znacznikiem - pojemnikiem, na przykład <div>. Dane wprowadzone przez elementy formularza są wysyłane do serwera. Plik z danymi jest dostarczany do aplikacji, która musi być napisana w języku PHP (lub w podobnym języku). Dane formularza są wysyłane w przypadku naciśnięcia myszą obiektu (przycisku) "input/submit". Ponieważ wprowadzone dane zawsze są wysyłane, to znacznik <form> ma obowiązkowy atrybut action, którego wartość jest adresem URL. Inne atrybuty znacznika <form>: method do ustawienia metody przesyłania danych; enctype do ustawienia metody kodowania danych. Dla atrybutu enctype często stosowane wartości: text/plain, co oznacza "bez kodowania", oraz multipart/form-data, co oznacza "kodowanie danych formularza". Dla atrybutu method mają zastosowanie tylko dwie wartości: get, co powoduje przesyłanie danych (zawartości formularza) jako dodatku, zapisywanego poza adresem URL wskazanym w atrybucie action; post, co powoduje przesyłanie danych (zawartości formularza) w protokole HTTP. Jeśli atrybut method ma wartość get, to dodatek, zapisywany poza adresem URL, rozpoczyna się od znaku "?", a dalej są zapisywane pary "parametr=wartość", między którymi znajduje się znak "&". Znak, który nie jest literą lub cyfrą, jest zamieniany na łańcuch "%HH", gdzie HH - szesnastkowy kod znaku. Dodatek, zapisywany poza adresem URL nie może być większy niż 255 znaków. W przypadku stosowania wartości get dla atrybutu method, dane są widoczne w komunikacie internetowym. Zaletą ustawienia wartości get dla atrybutu method jest podwyższona szybkość przesyłania danych. Dane przesłane przy zastosowaniu metody GET są składowane na serwerze do tablicy asocjacyjnej $_GET (dawna nazwa $HTTP_GET_VARS). Kluczem w tablicy służy wartość atrybutu name odpowiedniego elementu graficznego. Przesyłanie danych przy zastosowaniu metody POST jest bezpieczne, ponieważ dane są niewidoczne i mogą być zakodowane. Dane przesłane przy zastosowaniu metody POST są składowane na serwerze do tablicy asocjacyjnej $_POST (dawna nazwa $HTTP_POST_VARS). Kluczem w tablicy służy wartość atrybutu name odpowiedniego elementu graficznego.

Tablice asocjacyjne $_GET ($HTTP_GET_VARS) i $_POST ($HTTP_POST_VARS) są globalne. Przykłady. Plik serw1.php: <title>skrypt PHP</title> Info:<br/> Imię: <?php echo $_GET['imie']?><br /> Nazwisko: <?php echo $_GET['nazwisko']?><br /><br /> </body> Plik test1.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/dtd/strict.dtd"> <title>wy wietlił AT</title> <form action="http://localhost/serw1.php" method="get" enctype="text/plain" target="_blank"> <div> <input type= text name="imie"/>imię<br /> <input type= text name="nazwisko"/>nazwisko<br /> <input type="submit" name="uruch" value="skrypt"> Przycisk do uruchomienia skryptu PHP na serwerze (metoda GET)</input><br /> </div> </body></html> Plik serw2.php: <title>skrypt PHP</title> Info:<br/> Imię: <?php echo $_POST['imie']?><br /> Nazwisko: <?php echo $_POST['nazwisko']?><br /><br /> </body>

Plik test2.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/dtd/strict.dtd"> <title>wy wietlił AT</title> <form action="http://localhost/serw2.php" method="post" enctype="multipart/form-data" target="_blank"> <div> <input type= text name="imie"/>imię<br /> <input type= text name="nazwisko"/>nazwisko<br /> <input type="submit" name="uruch" value="skrypt"> Przycisk do uruchomienia skryptu PHP na serwerze (metoda POST)</input><br /> </div> </form> </body></html> Przesyłanie plików Element input/file służy do wyboru pliku u klienta. Przy odbiorze pliku na serwerze stosuje się tablica asocjacyjna $_FILES. Tablica $_FILES to dwuwymiarowa tablica asocjacyjna. Indeksowanie po wartości atrybutu name elementu input/file doprowadza do 4- elementowej tablicy asocjacyjnej z kluczami: "tmp_name" - nazwa pliku (kopii pliku) umieszczonego na serwerze, "name" - nazwa pliku po stronie klienta, "size" - rozmiar pliku w bajtach, "typ" - typ internetowy pliku, tj. format MIME (Multipurpose Internet Mail Extensions), zastosowany do przesłania pliku, na przykład text/plain, image/gif itp. (W formacie MIME jest wskazywany "typ/podtyp"). Otrzymany plik jest zapisywany na serwerze jako plik tymczasowy, a odwołania do niego jest możliwe przez klucz "tmp_name". Otrzymany plik należy sprawdzić, czy był on naprawdę wysłany użytkownikiem - klientem. Do sprawdzania można wykorzystywać funkcję is_uploaded_file. Oprócz tego zwykle jest sprawdzany typ pliku podawany przez klucz "typ". Do przeniesienia pliku z "tymczasowego" miejsca na miejsce "stałe" jest stosowana funkcja move_uploaded_file. Istniejący plik z takiej samej nazwą jest nadpisywany.

Przykład. Plik testb.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/dtd/strict.dtd"> <title>pliki</title> <form action="http://localhost/serwer.php" method="post" enctype="multipart/form-data" target="_blank"> <div> <input type="file" name="plik"> Plik</input><br /> <input type="submit" name="uruch" value="skrypt"> Przycisk do uruchomienia skryptu PHP na serwerze (metoda POST)</input><br /> </div> </form> </body> </html> Plik serwer.php: <title>skrypt PHP</title> <?php $max_rozmiar = 4*1024*1024; $pfile=$_files['plik']; if (is_uploaded_file($pfile['tmp_name'])) { if ($pfile['size'] > $max_rozmiar) { echo 'Błąd! Plik jest za duży!'; else { echo 'Odebrano plik. Początkowa nazwa: '.$pfile['name']; echo '<br/>'; if (isset($pfile['type'])) { echo 'Typ: '.$pfile['type'].'<br/>'; move_uploaded_file($pfile['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/DANE/'.$pfile['name']); else { echo 'Błąd przy przesyłaniu danych!'; echo "<br/><br/>";?></body></html>

Odnosniki Parametry można przekazać do serwera za pomocą elementu "a" (odnośnika). W tym celu należy w atrybucie href umieścić nie tylko nazwę pliku PHP jako adres URL, a i dodatek z parametrami. Dodatek należy rozpoczynać od znaku "?", a dalej zapisywać pary "parametr=wartość", między którymi umieszczać znak "&". Jeżeli w dodatku jest znak, który nie jest literą lub cyfrą, to znak należy zamienić na łańcuch "%HH", gdzie HH - szesnastkowy kod znaku. Dodatek, zapisywany poza adresem URL nie może być większy niż 255 znaków. Skrypt PHP otrzymuje dane przez metodę GET, i wysłane dane znajdują się w kolekcji $_GET. Przykład. Plik testc.html: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/dtd/strict.dtd"> <meta http-equiv="content-type" content="text/html; charset=iso- <title>testy</title> <a href="http://localhost/serwer.php?ident=test"> Wyślij mnie</a> </body> </html> Plik serwer.php: <title>skrypt PHP</title> Identyfikator: <?php echo $_GET['ident']?><br /><br /> </body> Ciasteczka(cookies) Ciasteczko (cookie) to niewielki (rozmiarem do 4K bajtów) obiekt tekstowy w przegłądarce. Serwer może zapisać dane w ciasteczku klienta przy pierwszym odwiedzeniu strony, a dalej może poberać te dane, gdy klient ponownie odwiedzi stronę. Tym samym można zidentyfikować użytkownika, który już wchodził na serwer. Można też wyświetlić tą zawartość okienek, przy której klient zakończył popszednie odwiedzanie strony itp. Wartość ciasteczek jest przekazywana w protokole HTTP lub HTTPS przy każdym kontakcie serwera z klientem:

- zawartość nowych ciasteczek w kierunku od serwera do klienta; - zawartość zapisanych ciasteczek w kierunku od klienta do serwera. Dla każdego ciasteczka jest wysyłany tekst nazwa_ciasteczka=wartość_ciasteczka;. Zawartość ciasteczka można przesyłać zakodowaną w protokole HTTPS. Czas istnienia ciasteczka można ustawiać na serwerze. Do zapisywania ciasteczka (cookie) jest stosowana funkcja setcookie: setcookie(nazwa_ciasteczka, wartość_ciasteczka, czas_przechowywania, ścieżka_dostępnosci_ciasteczka, domena_dostępności_ciasteczka, tryb_kodowania) Ilość argumentów można zmniejszać do jednego, tj. do "nazwa_ciasteczka". Jeżeli nie jest wskazany czas_przechowywania, to ciasteczka wygasają przy zamknięciu przeglądarki. Czas, do którego ciasteczko będzie przechowywane, jest liczony w sekundach od 01.01.1970. Do obliczenia czasu jest zwykle wykorzystywana funkcja time, która zwraca ilość sekund od 01.01.1970. Na bazie tej ilości można ustawić czas przechowywania ciasteczka, na przykład w ciągu jednej godziny: $czas1g=time()+3600; Argument ścieżka_dostępnosci_ciasteczka dotyczy ścieżki URL I zwykle jest ustawiany na wartość /. Argument domena_dostępności_ciasteczka wskazuje na domenu, która ma prawo korzystania z ciasteczka. Tą prawo mają wszystkie poddomeny danej domeny. Wartości argumentu tryb_kodowania: 0 - bez kodowania (protokół http), 1 - zastosować kodowanie (protokół https). Ciasteczka są wysyłane do klienta w nagłówku protokołu HTTP (HTTPS) przed innymi danymi. Dlatego w pliku PHP element "?php" należy umieszczać na początku, przed jakimkolwiek tekstem, a wywołanie funkcji setcookie - przed wywołaniem funkcji, powodujących wysyłanie danych do klienta, na przykład funkcji echo. Do otrzymania wartości ciasteczka należy stosować tablicę asocjacyjną $_COOKIE. Przykład: if(!isset($_cookie['haslo'])) {//ciasteczko haslo jeszcze nie istnieje setcookie('haslo',$_post['haslo'],time()+3600); else { $haslo=$_cookie['haslo']; if ($haslo=='qwer') printf('ok!<br />'); else printf('nie OK!<br />');

Obsługa sesji Odwiedzenia tej samej strony tworzą sesją. Sesja rozpoczyna się pierwszym odwiedzeniem i kończy się przez zamknięcie przeglądarki. Przy pierwszym odwiedzeniu strony serwer tworzy identyfikator sesji (ID) i dalej stosuje ten identyfikator do autoryzacji użytkownika (klienta). Identyfikator sesji jest przechowywany jako ciasteczko po stronie klienta, lub jest przesyłany razem z URL w parametrze PHPSESSID, jeżeli obsługa ciasteczek po stronie klienta jest wyłączona. Dla każdej sesji serwer tworzy tablicę asocjacyjną $_SESSION, z której może korzystać skrypt PHP w celu przechowywania danych sesji. Działania związane z tworzeniem obiektów sesji serwer może wykonać automatycznie, jeśli w pliku inicjalizacji php.ini jest włączona opcja auto_start. Te działania można inicjalizować przez wywołanie funkcji session_start. Lepiej zawsze wywoływać funkcję session_start, ponieważ ta funkcja sama sprawdza, czy sesja już uruchomiona przez włączoną opcję auto_start. Przykład skryptu, który liczy odwiedzenia strony: <?php session_start(); if (!isset($_session['kod'])) $_SESSION['kod']=$_SERVER['REMOTE_ADDR']; if (!isset($_session['ilosc'])) {// zmienna "ilosc" nie jest zarejestrowana session_regenerate_id(); $_SESSION['ilosc']=1; //początkową wartość echo 'Strona odczytana pierwszy raz.'; else {// zmienna "ilosc" jest zarejestrowana if ($_SESSION['kod']==$_SERVER['REMOTE_ADDR']) {// kod IP jest poprawny $_SESSION['ilosc']++; echo 'Strona odczytana '.$_SESSION['ilosc'].' razy. <br /><br />'; echo 'IP='.$_SESSION['kod'].'<br /><br />';?> Wywołanie dodatkowej funkcji session_regenerate_id zwiększa odporność na włamania. Ta funkcja powoduje generowanie nowego losowego identyfikatora sesji, który zamienia identyfikator wygenerowany automatycznie. Tym samym walczymy z automatycznym generowaniem dobrze widocznego w protokole HTTP identyfikatora, jeśli strona wywołana z parametrem PHPSESSID równym niepoprawnemu identyfikatorowi, na przykład 0. W celu uniknięcia włamania w przykładzie stosuje się też zapamiętywanie koda IP klienta: if (!isset($_session['kod'])) $_SESSION['kod']=$_SERVER['REMOTE_ADDR']; i porównanie kodów przy następnych odwiedzeniach strony: if ($_SESSION['kod']==$_SERVER['REMOTE_ADDR']) {// kod IP jest poprawny... echo 'IP='.$_SESSION['kod'].'<br /><br />';