Teleinformatyka Wykład 7 Komunikacja klient-serwer – cd.

Slides:



Advertisements
Podobne prezentacje
Zagrożenia w sieci..
Advertisements

20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
Prowadzący: mgr inż. Elżbieta Majka
Wprowadzenie do języka skryptowego PHP
Wprowadzenie do języka skryptowego PHP
Systemy rozproszone W. Bartkiewicz
Bezpieczeństwo aplikacji WWW
Kamil Smitkiewicz Bezpieczeństwo w PHP.
PROGRAMOWANIE STRUKTURALNE
Projektowanie i implementacja programów obsługujących gniazdka Wykład II Zbigniew Brożbar Paweł Baranowski.
Wykład 5 Przerwania w systemie SAB80C537 dr inż. Andrzej Przybył
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Damian Urbańczyk PHP Obsługa sesji.
Paweł Rajba Kurs WWW – wykład 10 Paweł Rajba
Proxy (WWW cache) Sieci Komputerowe
SO – LAB3 Wojciech Pieprzyca
Projektowanie Systemów Internetowych Ćwiczenia 2 Bielsko-Biała
Zarządzanie stanem aplikacji Mechanizm Sesji
Skrypty w powłoce Ryszard Haraszczuk. Pierwszy skrypt Stworzenie pliku touch skrypt Wpisanie specjalnej linii dla powłoki #!/bin/bash Napisanie skryptu.
9. KOORDYNACJA PROCESÓW WSPÓŁBIEŻNYCH PRZY UŻYCIU INTERPRETATORA
Narzędzia internetowe Paweł Rajba ttp://pawel.ii.uni.wroc.pl/
Architektura systemów wykorzystujących bazy danych (systemów bazodanowych) Wykład S. Kozielski.
Forum internetowe, przykład skryptu, Funkcjonalność.
Made by Mateusz Szirch Kilka słów o JavaScript.
SIEĆ P2P 1. Definicja sieci równouprawnionej. To taka sieć, która składa się z komputerów o takim samym priorytecie ważności, a każdy z nich może pełnić.
Jak przeżyć w Internecie? Czyli o bezpieczeństwie słów kilka… Michał Jankowski MJ Software Solutions Services.
Podstawy programowania II
Instrukcja USOS Rejestracja na zajęcia obieralne wersja by Marek Opacki.
ANNA BANIEWSKA SYLWIA FILUŚ
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Technologie internetowe II
Prezentacja i szkolenie
Technologie internetowe II
Technologie internetowe II Wykład 2 – Funkcje, Obiekty Dr Krzysztof Heller.
Programowanie obiektowe – zastosowanie języka Java SE
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3.
Etapy uruchamiania systemu Pliki konfiguracyjne
Technologie Internetowe

PL/SQL – dalsza wędrówka
Projektowanie stron WWW
XML Publisher Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przeznaczenie XML Publisher Przeznaczenie XML Publisher Definiowanie Definiowanie.
Jak przeżyć w Internecie? Czyli o bezpieczeństwie słów kilka… Michał Jankowski MJ Software Solutions Services.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Andrzej Majkowski 1 informatyka +. 2 Bezpieczeństwo protokołu HTTP Paweł Perekietka.
Opracowanie mgr Karol Adamczyk
Wprowadzenie do PHP SYSTEMY TELEINFORMATYCZNE Wykład 5 AiR 5r.
Temat 5: Instrukcje: print(), echo()
PHP Zmienne Damian Urbańczyk. Czym są zmienne? Zmienne zajmują pewien obszar pamięci, aby przechować pewne dane. W przypadku PHP, zmienne stosuje się.
Jak wykonać prosty licznik odwiedzin strony internetowej?
Komendy SQL do pracy z danymi
© DSRG 2004 Systemy Rozproszone - Zdalne wywołanie procedury 1 Zdalne wywołanie procedury Implementacja Sun RPC Ćwiczenie laboratoryje:
Elementy JavaServer Pages. Dyrektywy JSP  Elementy dyrektyw używane są do określania tej informacji o stronie, która pozostaje bez zmiany między żądaniami.
Kurs WWW – wykład 9 Paweł Rajba
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Aplikacje Baz Danych ASP.NET
Zarządzanie stanem w aplikacjach ASP.NET Elżbieta Mrówka-Matejewska
Elementy przeglądarki internetowej Pasek menu Pasek kart Pasek adresowy Pasek wyszukiwania Okno z zawartością strony internetowej Zakładki (ulubione)
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
AJAX w PHP.
Wykład 4 Dr Aneta Polewko-Klim
Programowanie Obiektowe – Wykład 2
AudaPad / AudaShare AudaShare PRO (2.8)
PROGRAMY DO KONTROLI RODZICIELSKIEJ
PROGRAMY DO KONTROLI RODZICIELSKIEJ
Programowanie obiektowe – zastosowanie języka Java SE
Zapis prezentacji:

Teleinformatyka Wykład 7 Komunikacja klient-serwer – cd.

Metody: pliki – niewygodne, czasochłonne ciasteczka "cookie" – na komputerze klienta bazy danych na serwerze - trwałe mechanizm sesji – dane nietrwałe, np. do czasu otwarcia przeglądarki

setcookie ( string nazwa [, string wartość] [, int data_ważności ]) CIASTECZKA „cookies” setcookie (PHP 3, PHP 4 , PHP 5) setcookie -- Wysyła ciasteczko i zapisuje u klienta setcookie ( string nazwa [, string wartość] [, int data_ważności ]) setcookie() określa ciasteczko (ang. cookie) do wysłania z nagłówkami HTTP. Ciasteczko musi być wysłane zanim jakiekolwiek inne nagłówki zostaną wysłane (to jest ograniczenie ciasteczek, nie PHP). To wymaga umieszczenia wywołań tej funkcji przed znacznikami <html> czy <head>. Wszystkie argumenty (poza nazwą) są opcjonalne. Jeśli obecny jest tylko argument nazwa, ciasteczko o takiej nazwie zostanie usunięte z klienta. Można też opuścić argumenty za pomocą pustego łańcucha (""). Argument data_ważności jest liczbą całkowitą. Zamiast niego można użyć liczby zero (0). Argument data_ważności jest regularnym uniksowym znacznikiem czasu, takim jak zwracany przez funkcje time() lub mktime (). Wysłane ciasteczko jest dostępne już przy następnym załadowaniu strony w tablicy $_COOKIE. W PHP do 4.1.0 była to tablica $HTTP_COOKIE_VARS.

Przykład 1. setcookie() wysyła przykładowe ciasteczka Częste pułapki: Tworzone skryptem ciasteczka nie będą widziane do następnego przeładowania strony dla której mają być widoczne. Ciasteczko może być usunięte tylko z tymi parametrami, z jakimi je ustawiono. Przykład 1. setcookie() wysyła przykładowe ciasteczka setcookie ("TestCookie", $value); setcookie ("TestCookie", $value,time()+3600);  /* traci ważność za godzinę */ Aby skasować ciasteczko, należy ustawić datę ważności na datę w przeszłości, co uruchomi w przeglądarce mechanizm kasowania ciasteczek. Przykład 2. Kasowanie ciasteczek// np. ustawić datę ważności na godzinę wstecz setcookie ("TestCookie", "", time() - 3600); Przykład 3. Sprawdzenie ciasteczka if (isset($_COOKIE["TestCookie"])) kod1; else kod2;

Licznik odwiedzin (czuły na odświeżanie strony) <?php if (isset($_COOKIE['licznik'])) { $licz=$_COOKIE['licznik']; $licz++;} else { $licz = 1;} setcookie("licznik",$licz,time()+(3600*24*31)); echo "Odwiedziłeś tę stronę". $licznik." razy<BR>"; echo"<BR>"; var_dump($_COOKIE);//informacja o tablicy _COOKIE ?>

zwykle jest zapisany w cookie przekazywany przez URL-e SESJA Unikalny identyfikator generowany przez PHP, przechowywany po stronie klienta: zwykle jest zapisany w cookie przekazywany przez URL-e Natomiast dane sesji zapisywane po stronie serwera Przeglądarka przechowuje identyfikator sesji (jak bilet), odnajduje zmienne przechowywane na serwerze dla danej sesji. Pamięć sesji na serwerze – identyfikator u klienta

Obsługa sesji w PHP ma na celu zapewnienie sposobu na zachowanie pewnych danych w trakcie następujących po sobie wywołań strony – żądań HTTP (np. id klienta, danych w koszyku, numeru karty kredytowej). Wchodzący na stronę WWW otrzymuje unikalny identyfikator, tzw. id sesji (32 cyfry szesnastkowe), np: db2245f91a5a3dadd2010ba0172b0290 - sess_id() Pozwala na zgłoszenie zmiennych jako zmiennych sesji – przechowywanych na serwerze. Identyfikator sesji (PHPSESSID) jest jedyną wartością widoczną po stronie klienta – jeśli jest dostępny przez cookie lub URL to można uzyskać dostęp do zmiennych przechowywanych na serwerze.

Sesja zazwyczaj trwa tak długo jak uruchomiona jest przeglądarka. Jeśli: session.cookie_lifetime = 0 to do czasu restartu przeglądarki. Jeśli dłużej – mechanizm usuwania starych sesji. Są także metody wykorzystania sesji bez cookie – użytkownik może wyłączyć ich obsługę

imie=”Jan” Sesja imie=”Jan” Sesja GET/witaj.php?imie=”Jan” Serwer Przeglądarka imie=”Jan” Sesja SET COOKIE:PHPSESSID=1234 GET/index.php Przeglądarka Serwer COOKIE :PHPSESSID=1234 imie=”Jan” Sesja <HTML> Witaj Jan ...<HTML>

PHP sprawdza czy id sesji zostało przypisane: automatycznie (jeśli session.auto_start w php.ini jest ustawione na 1) jawnie przez wywołanie session_start() niejawnie przez wywołanie session_register() Jeśli tak, poprzednio zachowane środowisko jest odtwarzane Opcje konfiguracyjne track_vars i register_globals wpływają na to, jak zmienne sesyjne są przechowywane i odtwarzane. Zapisane w pliku php.ini

register_globals PHP posiada możliwość ustawienia w pliku konfiguracyjnym php.ini dyrektywy register_globals. Jest ona odpowiedzialna za rejestrowanie danych otrzymanych z formularzy, ciastek, sesji czy serwera jako zmienne globalne. Oznacza to, że jeśli dyrektywa register_globals została ustawiona na on to wszystkie zmienne przekazane do skryptu dostępne są w postaci $nazwa_zmiennej, bez potrzeby stosowania żadnych tablic. Jest to łatwiejsze, lecz powoduje niebezpieczeństwo - używając zmiennych globalnych nie można stwierdzić, czy dana wartość pochodzi z sesji czy może została podana w URL- u metodą GET.

Zależnie od metody, zmienne trafiają do odpowiednich tablic asocjacyjnych. Dane przesłane metodą GET trafiają do tablicy $_GET (lub $HTTP_GET_VARS w wersjach starszych niż 4.1.0) a dane z metody POST to tablicy $_POST (lub $HTTP_POST_VARS). Tablice $_GET i $_POST są superglobalne. Oznacza to, że są widoczne w każdym miejscu kodu PHP bez konieczności użycia składni globals. Źle napisane skrypty – możliwość obejścia zabezpieczeń. Używanie odpowiednich tablic jest mocno zalecane. Począwszy od wersji 4.2.0, dyrektywa register_globals jest domyślnie wyłączona. Pisząc skrypt dla nieznanego serwera trzeba się liczyć z ewentualnością braku dostępu do zmiennych globalnych.

track_vars Jeśli włączone – zmienne środowiskowe, GET, POST, Cookie, i zmienne serwera można znaleźć w superglobalnych tablicach asocjacyjnych: $_ENV, $_GET, $_POST $_COOKIE $_SERVER $_SESSION

Najczęściej używane funkcje: session_start(); //tworzy lub wznawia istniejącą sesję, sprawdza istnienie PHPSESSID lub jeśli wskazany w żądaniu identyfikator nie zostanie znaleziony to tworzona jest nowa sesja session_id(); //Pobiera i/lub ustawia identyfikator bieżącej sesji session_register(zm1,zm2...);// Rejestruje jedną lub więcej zmiennych w bieżącej sesji session_is_registered (zmienna);/bez znaku $ albo w ciapkach ' ' - //sprawdza, czy zmienna jest zarejestrowana w sesji session_ unregister(zmienna); //Wyrejestrowuje zmienną z bieżącej sesji session_unset();//Zwalnia wszystkie zmienne sesyjne session_destroy(); //Niszczy wszystkie dane zarejestrowane w sesji

Od wersji PHP 4.1.0 dostępna jest superglobalna tablica $_SESSION

Rejestracja zmiennej: <?php session_start(); if (isset($_SESSION['licznik'])) { $_SESSION['licznik']++; } else { $_SESSION['licznik'] = 0; echo $licznik."<BR>"; echo "Bezpieczniej:".$_SESSION['licznik']; //gdy register_globals wyłączone ?>

Rejestracja tablicy – plik ses1.php session_start(); $x1=array(100,200,300); echo "0-$x1[0]<BR>"; echo "1-$x1[1]<BR>"; echo "2-$x1[2]<BR>"; $_SESSION['tablica'] = $x1; echo "<A href=\"ses2.php\">Drugi</A>"; ?> Przechwyt w pliku ses2.php <?php session_start(); echo $_SESSION['tablica'][0]; echo "<BR>"; echo $_SESSION['tablica'][1]; echo $_SESSION['tablica'][2]; ?>

Wyrejestrowanie zmiennej: <? session_start(); unset($_SESSION['licznik']); ?>

Jeśli włączona jest opcja register_globals, wszystkie globalne zmienne mogą być zarejestrowane jako zmienne sesyjne a zmienne sesyjne będą odtworzone do odpowiadających im zmiennych globalnych. Ponieważ PHP musi wiedzieć które globalne zmienne są zarejestrowane jako zmienne sesyjne, użytkownik musi użyć funkcji session_register(), podczas gdy tablica $_SESSION nie musi używać session_register(). Zwykle register_globals jest wyłączone

Prosty przykład: FORMULARZ: .... <meta http-equiv=\"Content-Language\" content=\"pl\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1250\"> </HEAD><BODY> <FONT SIZE=5 color=\"red\"> <FORM method="POST" action="wynik1.php"> <p>Imię:<input type="text" name="Imie" size="20" > <input type="Submit" value="Wykonaj" name="B2"></p> </FORM>

Wynik1.php <?php session_register("Im"); //SESSION_START wykonane niejawnie $Im=$_POST['Imie']; echo "Zmienna:$Im<BR>"; echo "Zmienna sesyjna:".$_SESSION['Im']."<BR>"; ?> lub <?php session_start(); $_SESSION['Im']=$_POST['Imie']; echo "Zmienna sesyjna:".$_SESSION['Im']."<BR>"; echo "Ciastko:".$_COOKIE['PHPSESSID']; ?>

Formularz: rejestr1.php Przykład: Formularz: rejestr1.php <?php echo " <meta http-equiv=\"Content-Language\" content=\"pl\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1250\">"; echo "<form method=\"POST\" action=\"rejestr2.php\"> <table width=100%> <tr> <td width=8%>Nazwisko:</td> <td width=82%><input type=\"text\" name=\"T1\" size=20></td> </tr> <tr> <td width=8%>Imię:</td> <td width=82%><input type=\"text\" name=\"T2\" size=20></td> </tr> <tr> <td width=8%>Adres: </td> <td width=82%><input type=\"text\" name=\"T3\" size=20></td> </tr> </table> <p><input type=\"submit\" value=\"Akceptuj\" name=\"B1\"></p>"; echo "</form>"; ?>

Plik rejestr2.php <?php session_start(); echo "<meta http-equiv=\"Content-Language\" content=\"pl\"> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1250\">"; echo "<FONT size=4>"; echo "Witaj ".$_POST['T1']."<BR>"; echo "Zapamiętałem twoje dane<BR>"; echo "Nazwisko:".$_POST['T1']."<BR>"; echo "Imie:".$_POST['T2']."<BR>"; echo "Adres:".$_POST['T3']."<BR>"; $PHPSESSID=sess_id(); echo $PHPSESSID."<BR>"; var_dump($_SESSION); ?>

Upload plików – wysyłanie na serwer Formularz: <form action="dodaj.php" method="post" enctype="multipart/form-data"> <input type="file" name="obrazek" /> <input type="submit" value="Wyslij" /> </form>

Plik dodaj.php <?php chmod('./obrazki',0777); //Powstaje tablica _FILES echo "FILES:".$_FILES['obrazek']["tmp_name"]."<BR>"; if (isset($_FILES['obrazek'])) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["obrazek"]["tmp_name"]; $name = $_FILES["obrazek"]["name"]; if (is_uploaded_file($tmp_name)) move_uploaded_file($tmp_name, './obrazki/'.$name); $komunikat = "<p class='komunikat'>Plik dodany</p>"; echo $komunikat; }

//wyświetlenie spisu obrazków w katalogu obrazki $kat = opendir('./obrazki'); //otwarcie do czytania $lista_plikow = "<ul>"; //pocz listy while ($naz_pliku = readdir($kat)) //war. zakończenia if (($naz_pliku !=".")&&($naz_pliku !="..")) //filtr $lista_plikow .= "<li>$naz_pliku"; //dopisanie $lista_plikow .= "</ul>"; //koniec listy closedir($kat); echo "$lista_plikow"; ?>

Można też sprawdzać rozmiar i typ pliku: $allowed_types = array("jpg" , "JPG"); $filename = $_FILES['obrazek']['name']; $filetype = substr($filename, -3, 3); if((!in_array($filetype,$allowed_types))&&($filename!="")) { echo '<SCRIPT language="javascript">'; echo "alert('Typ obrazka musi być JPG ')"; echo "</SCRIPT>"; echo "zly typ"; exit; } elseif ($_FILES['obrazek']['size']>$dopusz_rozm) { echo '<SCRIPT language="javascript">'; echo "alert('Rozmiar obrazka max 100 kb')"; echo "za duzy"; exit; Są biblioteczne procedury zmiany wymiarów obrazów