1 / 50

Technologie internetowe II

Technologie internetowe II. Wykład 3 – Formularze, poczta, pliki Dr Krzysztof Heller. Literatura. Meloni J.C.: PHP, MySQL i Apache dla każdego. Wydanie III, Helion, 2007 Lis M.: PHP i MySQL dla każdego, Helion, 2005 Leszek 'leon' Krupiński: Wykłady internetowe, 2007

milt
Download Presentation

Technologie internetowe II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Technologie internetowe II Wykład 3 – Formularze, poczta, pliki Dr Krzysztof Heller

  2. Literatura • Meloni J.C.: PHP, MySQL i Apache dla każdego. Wydanie III, Helion, 2007 • Lis M.: PHP i MySQL dla każdego, Helion, 2005 • Leszek 'leon' Krupiński: Wykłady internetowe, 2007 • http://docs.wsei.pl/dydaktyka/Techn_Internet_II_wyklad3.ppt Technologie internetowe II

  3. Plan wykładu 3 • Formularze. • Tworzenie formularza, łączenie kodu HTML i PHP, zapisywanie stanu, przekierowania. • Wysyłanie poczty elektronicznej, przesyłanie plików. Technologie internetowe II

  4. Pobieranie danych

  5. Pobieranie danych • Jedyna metoda - pobranie ze standardowego formularza HTML. • W PHP wszystkie dane z formularza trafiają do odpowiednich tablic asocjacyjnych o nazwach kluczy takich, jak nazwy pól formularza. • Jeśli w konfiguracji PHP opcja register_globals jest włączona to stworzone zostaną od razu zmienne o nazwach takich jak nazwy pól formularza. • Są dwie metody przekazywania parametrów do innych stron: • metoda "GET" • metoda "POST" Technologie internetowe II

  6. Metoda GET • Używana gdy jest niewiele parametrów. • Parametry przekazuje się za pomocą adresu URL którego długość jest ograniczona. • Parametry są widoczne w pasku adresu przeglądarki. • Adres od parametrów oddzielany jest za pomocą znaku zapytania, a kolejne pary parametr=wartość za pomocą znaku ampersand ("&"). • Dane przesłane metodą GET trafiają do tablicy $_GET. Technologie internetowe II

  7. Metoda POST • Do przekazywania parametrów wykorzystuje nagłówek zapytania. • Metoda ta umożliwia przekazywanie dużo większych parametrów. • Parametrów nie widać w pasku przeglądarki. • Dane przesłane metodą POST trafiają do tablicy do tablicy $_POST . • Tablice $_GET i $_POST są superglobalne. • Istnieje jeszcze superglobalna tablica $_REQUEST, która łączy w sobie tablice $_GET, $_POST, $_COOKIE i $_FILES. Technologie internetowe II

  8. Przykład – raz.php <html> <head> <title>Test formularza</title> </head> <body> <form action="dwa.php" method="GET"> Imię: <input type=text name="imie"/><br/> Nazwisko: <input type=text name="nazwisko"/><br/> Proszę o fakturę do zamówienia: <input type=checkbox name="faktura"/><br/> Chcę zamówić:<br/> <input type=radio name=zamow value="kola"/>Coca-colę<br> <input type=radio name=zamow value="fanta"/>Fantę<br> <input type=radio name=zamow value="sprite"/>Sprite'a<br> <input type=submit value="Wyślij"/> </form> </body> </html> Technologie internetowe II

  9. dwa.php <html> <head> <title>Wyniki</title> </head> <body> Imię: <?php echo $_GET['imie']?><br> Nazwisko: <?php echo $_GET['nazwisko']?><br> Faktura: <?php echo ($_GET['faktura'] == 'on' ? 'Tak' : 'Nie')?><br> Zamówienie: <?php switch($_GET['zamow']) { case "kola": echo "Coca-cola"; break; case "fanta": echo "Fanta"; break; case "sprite": echo "Sprite"; break; } ?> </body> </html> Technologie internetowe II

  10. Formularze

  11. Prosty formularz <html> <head> <title>Prosty formularz HTML</title> <meta http-equiv=content-type content="text/html;charset=iso-8859-2"> </head> <body> <form action="wyslij_prostyform.php" method="POST"> <p><strong>Imię i nazwisko:</strong><br> <input type="text" name="uzytkownik"> </p><p><strong>Wiadomość:</strong><br> <textarea name="wiadomosc" rows="5" cols="40"></textarea></p><p> <input type="submit" value="Wyślij"></p> </form> </body> </html> Metoda wysyłania formularza: POST, zmienna $_POST Pole tekstowe „uzytkownik” Pole tekstowe „wiadomosc” Przycisk wysyłający formularz Technologie internetowe II

  12. wyslij_prostyform.php Metoda wysyłania formularza: POST, zmienna $_POST <?php echo "<p>Witaj <b>$_POST["uzytkownik"]</b>!</p>"; echo "<p>Twoja wiadomość to:<br/><b>$_POST["wiadomosc"]</b></p>"; ?> Metoda wysyłania formularza: POST, zmienna $_POST Technologie internetowe II

  13. Wynik Technologie internetowe II

  14. Działanie • Skrypt zostanie wywołany gdy użytkownik wyśle formularz • Zmienne: $_POST["uzytkownik"] oraz $_POST["wiadomosc"] zawierają wartość wpisaną przez użytkownika • Formularze można także wysłać przy pomocy metody GET • POST potrafi obsłużyć większe ilości danych • POST nie wyświetla przesyłanych informacji w pasku adresu przeglądarki • Metoda GET używa tablicy $_GET Technologie internetowe II

  15. Przekazywanie informacji w tablicach

  16. Przekazywanie informacji • Pobieranie informacji z pól formularza posiadających tylko jedną wartość (pola tekstowe, obszary tekstu, przełączniki) jest proste. • Są pola (np. SELECT) mogące przyjmować wiele wartości. • Składnia – nawiasy kwadratowe na końcu nazwy. Technologie internetowe II

  17. Formularz zawierający SELECT <html> <head> <title>Formularz HTML zawieraj±cy element SELECT</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"> </head> <body> <form action="wyslij_selectform.php" method="POST"> <p><strong>Imię i nazwisko:</strong><br/> <input type="text" name="uzytkownik"/> <p><strong>Wybierz produkty:</strong> <br/> <select name="produkty[]" multiple="multiple"> <option value=„Śrubokręt">¦rubokręt</option> <option value="Tricoder">Tricoder</option> <option value="ORAC AI">ORAC AI</option> <option value="HAL 2000">HAL 2000</option> </select> <p><input type="submit" value="Wyślij"></p> </form> </body> </html> Elementy wybrane tutaj są dostępne w tablicy $_POST[„produkty”] Argument „multiple” – uzytkownik może wybrać dowolną liczbę opcji Technologie internetowe II

  18. wyslij_selectform.php Odwołanie do wartości zmiennej $_POST <?php echo "<p>Witaj <b>$_POST[uzytkownik]</b>!</p>"; echo "<p>Wybrałeś następujące produkty:<br>"; if (!empty($_POST['produkty'])) { echo "<ul>"; foreach ($_POST['produkty'] as $wartosc) { echo "<li>$wartosc</li>"; } echo "</ul>"; } ?> Jeżeli zmienna $_POST nie jest pusta Przechodzimy przez nią wyświetlając każdy element. W tablicy są wartości atrybutu value elementów OPTION, odpowiadające zaznaczonym opcjom. Technologie internetowe II

  19. Wynik Technologie internetowe II

  20. Działanie • Technika szczególnie wygodna dla pól typu SELECT • Można używać także dla innych elementów • Gdy nazwa pola kończy się nawiasem kwadratowym silnik PHP łączy wszystkie wartości o tej samej nazwie w jedną tablicę • Przykład: <input type= ”checkbox” name= ”produkty[]” value= ”Śrubokręt”/>Śrubokręt<br/> <input type= ”checkbox” name= ”produkty[]” value= ”Tricorder”/>Tricorder<br/> <input type= ”checkbox” name= ”produkty[]” value= ”ORAC AI”/>ORAC AI<br/> <input type= ”checkbox” name= ”produkty[]” value= ”HAL 2000”/>HAL 2000<br/> • Wybrane wartości będą dostępne w tablicy $_POST[„produkty”] Technologie internetowe II

  21. Łączenie kodu HTML i PHP

  22. Łączenie kodu PHP i HTML • Czasem jest wygodniej mieć dwa rodzaje kodu w jednym pliku – łatwiej jest wyświetlić ten sam formularz ponownie. • Można wyświetlić cały formularz z kodu PHP (funkcja echo). • Łatwiej jest umieścić kod HTML w skrypcie PHP. Technologie internetowe II

  23. Zgadywanie liczby Ustawiamy wartość liczby do odgadnięcia <?php $liczba_do_odgadniecia = 42; if (!isset($_POST['liczba'])) { $komunikat = "Witaj w maszynie zgadującej!"; } else if ($_POST['liczba'] > $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt duża, spróbuj mniejszej."; } else if ($_POST['liczba'] < $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt mała, spróbuj większej."; } else { // poprawna odpowiedź $komunikat = "Gratulacje!"; } ?> Jeżeli formularz nie był wysłany to zaczynamy, inaczej kontynuacja Technologie internetowe II

  24. Zgadywanie liczby (c.d.) <html> <head> <title>Skrypt zgadujący</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"> </head> <body> <h1><?php echo $komunikat; ?></h1> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p><strong>Wybierz liczbę:</strong> <input type="text" name="liczba"> </p><p><input type="submit" value="Wyślij"></p> </form> </body> </html> Ścieżka do aktualnie wykonywanego skryptu Technologie internetowe II

  25. Ukryte pole – informacja o stanie

  26. Zapisywanie informacji o stanie • Poprzedni kod nie pozwala stwierdzić, ile razy próbowano zgadnąć liczbę. • Można zastosować pole ukryte. • Działa jak pole tekstowe, ale jest niewidoczne dla użytkownika. • Poprawiamy skrypt zgadujący. Technologie internetowe II

  27. Zgadywanie liczby 2 <?php $liczba_do_odgadniecia = 42; $liczba_prob = (isset($_POST['liczba_prob'])) ? $_POST['liczba_prob'] + 1 : 1; if (!isset($_POST['liczba'])) { $komunikat = "Witaj w maszynie zgadującej!"; } else if ($_POST['liczba'] > $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt duża, spróbuj mniejszej."; } else if ($_POST['liczba'] < $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt mała, spróbuj większej."; } else { // poprawna odpowiedź $komunikat = "Gratulacje!";} $liczba = $_POST['liczba'];?> <html><head> <title>Zachowywanie stanu w ukrytym polu</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"> </head><body> <h1><?php echo $komunikat ?></h1> <p><strong>Numer próby:</strong> <?php echo $liczba_prob; ?></p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p><strong>Wybierz liczbę:</strong> <input type="text" name="liczba" value="<?php echo $liczba; ?>"> <input type="hidden" name="liczba_prob" value="<?php echo $liczba_prob; ?>"> <p><input type="submit" value="Wyślij"></p> </form></body></html> Ukryte pole w tym wierszu Technologie internetowe II

  28. Mechanizm sesji • Mechanizm sesji umożliwia przekazywanie parametrów między stronami w łatwy sposób. • Zmienne są przechowywane po stronie serwera a u klienta trzymane jest tylko ID sesji. ID jest zapisane w cookie lub przekazywane przez URL. • PHP umie rozpoznać czy na komputerze klienta włączony jest mechanizm cookies i w razie potrzeby dodać identyfikator sesji do każdego URLu i formularza (opcja --enable-trans-sid). • Przed rozpoczęciem sesji do przeglądarki nie mogą być wysłane żadne inne dane. • Po otrzymaniu żądania klienta PHP automatycznie (jeśli w konfiguracji PHP włączona została opcja auto_start) lub "ręcznie" przez programistę (za pomocą funkcji session_start()) sprawdza, czy przypisano już ID sesji. J • Tak - PHP odczytuje zmienne zarejestrowane w tej sesji. • Nie - generowany jest nowy, unikalny identyfikator sesji. • Aby PHP zaczęło śledzić wartość zmiennej, najpierw trzeba ją zarejestrować za pomocą funkcji session_register(nazwa_zmiennej). Istnieje też odwrotna wersja tej funkcji. • Zmienna $_SESSION, przechowuje zmienne zarejestrowane w sesji. Kluczem tej tablicy jest nazwa zarejestrowanej zmiennej. • Tablicę można użyć do rejestrowania zmiennych sesyjnych. Wystarczy przypisać wartość odpowiedniemu kluczowi tej tablicy aby zmienna została zarejestrowana. Technologie internetowe II

  29. Przykład • zliczanie ile razy dana osoba odczytała daną stronę z czasie jednej sesji. <? session_start(); /* można pominąć jeśli jest się pewnym że włączona jest opcja auto_start */ if (!isset($_SESSION['count'])) { // jeśli zmienna nie jest zarejestrowana $_SESSION['count'] = 0; // przypisz jej początkową wartość } else { // jeśli jest zarejestrowana $_SESSION['count']++; // zwiększ jej wartość } echo 'Strona odczytana '.$_SESSION['count'].' razy w ciągu tej sesji'; ?> Technologie internetowe II

  30. Przekierowania

  31. Przekierowania • Problem skryptu – zgadywanki: po odgadnięciu liczby nadal wyświetla formularz. • Kod HTML statycznie zapisany w skrypcie. • Można dokonać przekierowania. • Serwer komunikując się z klientem najpierw wysyła nagłówki, można dodać swoje dzięki funkcji header (). • Dowolny znak poza blokiem PHP powoduje wysyłanie nagłówka!!! Technologie internetowe II

  32. Zgadywanie liczby 2 <?php $liczba_do_odgadniecia = 42; $liczba_prob = (isset($_POST['liczba_prob'])) ? $_POST['liczba_prob'] + 1 : 1; if (!isset($_POST['liczba'])) { $komunikat = "Witaj w maszynie zgadującej!"; } else if ($_POST['liczba'] > $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt duża, spróbuj mniejszej."; } else if ($_POST['liczba'] < $liczba_do_odgadniecia) { $komunikat = "Liczba $_POST[liczba] jest zbyt mała, spróbuj większej."; } else { // poprawna odpowiedź header(„location: gratulacje.html”); exit; $liczba = $_POST['liczba'];?> <html><head> <title>Zachowywanie stanu w ukrytym polu</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"> </head><body> <h1><?php echo $komunikat ?></h1> <p><strong>Numer próby:</strong> <?php echo $liczba_prob; ?></p> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <p><strong>Wybierz liczbę:</strong> <input type="text" name="liczba" value="<?php echo $liczba; ?>"> <input type="hidden" name="liczba_prob" value="<?php echo $liczba_prob; ?>"> <p><input type="submit" value="Wyślij"></p> </form></body></html> Tutaj jest przekierowanie Ukryte pole w tym wierszu Technologie internetowe II

  33. Wysyłanie poczty

  34. Konfiguracja systemu • Dane pobrane w formularzu można też wysłać pocztą elektroniczną. • Przed użyciem funkcji mail() należy skonfigurować system. • Plik php.ini: • funkcja mail() musi mieć dostęp do serwera poczty wychodzącej • należy też podać adres zapisywany w polu „From:” • Serwer WWW musi być ponownie uruchomiony. Technologie internetowe II

  35. Formularz kontaktowy <html> <head> <title>Formularz kontaktowy</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"> </head> <body> <form action="wyslijmail.php" method="POST"> <p><strong>Imię i nazwisko:</strong><br> <input type="text" size="25" name="imie"></p> <p><strong>Adres email:</strong><br> <input type="text" size="25" name="email"></p> <p><strong>Wiadomość:</strong><br> <textarea name="wiadomosc" cols=30 rows=5></textarea></p> <p><input type="submit" value="Wyślij"></p> </form></body></html> Technologie internetowe II

  36. Wynik Technologie internetowe II

  37. Formularz kontaktowy - PHP <html><head><title>Wysyłanie formularza kontaktowego</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"></head><body> <?php echo "<p><b>$_POST[imie]</b>, dziękujemy za wypełnienie formularza!</p>"; echo "<p>Twój adres to: <b>$_POST[email]</b>.</p>"; echo "<p>Twoja wiadomość to:<br>"; echo "$_POST[wiadomosc] </p>"; // treść $tresc = "Imię i nazwisko: $_POST[imie]\n"; $tresc .= "Adres email: $_POST[email]\n"; $tresc .= "Wiadomość: $_POST[wiadomosc]\n"; // nagłówki $odbiorca = "ty@twojadomena.com"; $temat = "Formularz kontaktowy"; $naglowki = "From: Strona WWW <jakisadres@domena.com> \n"; $naglowki .= "Reply-To: $_POST[email]"; // wysyłanie wiadomości mail($odbiorca, $temat, $tresc, $naglowki); ?></body></html> Tutaj budujemy treść wiadomości Tworzenie odbiorcy, tematu i nagłówka Jeżeli używamy serwera Windows to ma być \r\n Technologie internetowe II

  38. Formularz kontaktowy - HTML <html><head><title>Wysyłanie formularza kontaktowego - wersja HTML</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"></head> <body> <?php echo "<p><b>$_POST[imie]</b>, dziękujemy za wypełnienie formularza!</p>"; echo "<p>Twój adres to: <b>$_POST[email]</b>.</p>"; echo "<p>Twoja wiadomość to:<br>"; echo "$_POST[wiadomosc] </p>"; // treść $tresc = "<p><strong>Imię i nazwisko:</strong> $_POST[imie]</p>"; $tresc .= "<p><strong>Adres email:</strong> $_POST[email]</p>"; $tresc .= "<p><strong>Wiadomość:</strong> $_POST[wiadomosc]</p>"; // nagłówki $odbiorca = "ty@twojadomena.com"; $temat = "Formularz kontaktowy";$naglowki = "MIME-Version: 1.0\r\n"; $naglowki .= "Content-type: text/html; charset=ISO-8859-2\r\n"; $naglowki .= "From: Strona WWW <jakisadres@domena.com> \n"; $naglowki .= "Reply-To: $_POST[email]"; // wysyłanie wiadomości mail($odbiorca, $temat, $tresc, $naglowki); ?></body></html> Formatowanie za pomocą znaczników HTML Nadanie wartości nagłówkom MIME Technologie internetowe II

  39. Przesyłanie plików

  40. Obsługa plików • Przekazanie pliku na serwer - n.p. dodanie zdjęcia do galerii. • Robi się to przy pomocy pola typu "file" w formularzu i odpowiednich zmiennych w skrypcie odbierającym dane. • Plik przesyła się korzystając z pola formularza typu "file". • Formularz musi być wysyłany metodą POST. • Formularz musi zawierać atrybut ENCTYPE=”multipart/form-data”. Technologie internetowe II

  41. Plik1.php <html> <body> <form action="plik2.php" method="POST" ENCTYPE="multipart/form-data"> <input type="file" name="plik"/> <input type="submit" value="Wyślij plik"/> </form> </body> </html> Technologie internetowe II

  42. Upload plików • Na stronie do której został wysłany formularz dostępna będzie wielowymiarowa tablica asocjacyjna $_FILES. • Pierwszym wymiarem są pola typu file z formularza (klucze są nazwami tych pól), a w drugim informacje o przesłanym pliku. Informacje te to: • tmp_name - nazwa tego pliku na serwerze wraz ze ścieżką; używając tego pola można uzyskać dostęp do przesłanego pliku • name - nazwa pliku jaką posiadał u użytkownika • type - typ MIME pliku, np. text/plain lub image/gif; informacja ta jest dostępna tylko jeśli przeglądarka klienta dostarczyła takiej informacji. • size - wielkość pliku w bajtach Technologie internetowe II

  43. Przesłanie pliku <html> <head> <title>Prosty formularz, pozwalający na przesłanie pliku</title> <meta http-equiv=content-type content="text/html; charset=iso-8859-2"></head> <body> <form action="wyslij_plik.php" enctype="multipart/form-data" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="51200"> <p><strong>Plik do wysłania:</strong> <input type="file" name="plik"></p><p><input type="submit" value="Wyślij!"></p> </form> </body> </html> Max rozmiar pliku Nazwa pola Technologie internetowe II

  44. Zabezpieczenia • Przesyłanie plików na serwer jest sprawą dosyć niebezpieczną, dlatego należy odpowiednio się zabezpieczyć. • Funkcja is_uploaded_file() - sprawdza czy podany plik faktycznie został odebrany od użytkownika - sprawdzenie takie jest istotne, gdyż w przypadku źle napisanego skryptu "włamywacz" będzie mógł odczytać z serwera dowolny plik, do którego prawo odczytu posiada użytkownik jako który pracuje serwer WWW. • Jeśli wszystkie próby przebiegną pomyślnie, plik jest przenoszony w docelowe miejsce przy pomocy funkcji move_uploaded_file(). • Jjeśli plik o takiej samej nazwie już istnieje, zostanie nadpisany, dlatego też należy najpierw to sprawdzić przy pomocy funkcji file_exists(). • Kolejnym niebezpieczeństwem jest możliwość wstawienia na serwer skryptu PHP zawierającego "niebezpieczne instrukcje". Można się przeciw temu zabezpieczyć sprawdzając rozszerzenie lub typ przesyłanego pliku. Jeśli typ pliku jest inny od oczekiwanego, plik można albo usunąć albo zmienić mu rozszerzenie. • Docelowy katalog musi mieć odpowiednie prawa dostępu. Użytkownik, jako który pracuje serwer WWW musi mieć prawo zapisu do tego katalogu. Technologie internetowe II

  45. Odbiór pliku <?php $max_rozmiar = 1024*1024; if (is_uploaded_file($_FILES['plik']['tmp_name'])) { if ($_FILES['plik']['size'] > $max_rozmiar) { echo 'Błąd! Plik jest za duży!'; } else { echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['plik']['name']; echo '<br/>'; if (isset($_FILES['plik']['type'])) { echo 'Typ: '.$_FILES['plik']['type'].'<br/>'; } move_uploaded_file($_FILES['plik']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']); } } else { echo 'Błąd przy przesyłaniu danych!'; } ?> Technologie internetowe II

  46. Obsługa przesłanego pliku <?php $plik_katalog = "/katalog/dla/przesylanych/plikow"; foreach($_FILES as $plik_nazwa => $plik_tablica) { echo „Ścieżka: ".$plik_tablica['tmp_name']."<br>\n"; echo "nazwa: ".$plik_tablica['name']."<br>\n"; echo "typ: ".$plik_tablica['type']."<br>\n"; echo "rozmiar: ".$plik_tablica['size']."<br>\n"; if (is_uploaded_file($plik_tablica['tmp_name'])) { move_uploaded_file($plik_tablica['tmp_name'], "$plik_katalog/$plik_tablica[name]") or die ("Nie można przenieść pliku"); echo "Plik został przeniesiony!<br><br>"; } } ?> Technologie internetowe II

  47. Cookies • Mechanizm cookies (ciasteczka) do przechowywania niewielkich ilości danych na komputerze oglądającego stronę (np. informacje o imieniu i nazwisku lub nazwie użytkownika w tym serwisie) • Ciasteczka ustawione przez dany serwis dostępne są tylko dla niego i ustawiane są na jakiś czas. • Ciasteczka przekazywane są za pomocą nagłówków HTTP. Muszą być one wysłane zanim do przeglądarki zostanie wysłana jakakolwiek inna treść. Przed zapisaniem ciasteczka nie może być żadnego wywołania funkcji echo i pochodnych, a także tag otwierający tryb PHP musi być pierwszymi znakiami w pliku - nie może być żadnej spacji ani pustych wierszy. • PHP automatycznie odczytuje ciasteczka i zamienia je na zmienne. Są one przechowywane w superglobalnej tablicy asocjacyjnej $_COOKIE, w której kluczami są nazwy ciasteczek. • Standardowo nie ma możliwości przechowywania tablic w ciasteczkach, lecz można to obejść. Przed zapisaniem tablicy w ciasteczku należy użyć funkcji serialize(). Zamienia ona tablicę na ciąg znaków. Do ponownego odczytania takiej tablicy służy funkcja unserialize(). Technologie internetowe II

  48. Cookies • Ciasteczka ustawia się je pomocą funkcji setcookie ( nazwa, wartość, czas_wygaśnięcia, ścieżka, domena, bezpieczeństwo). • Tylko pierwszy parametr jest niezbędny. Oznacza on nazwę ciasteczka - taką nazwą będzie miała zmienna stworzona przez PHP po ponownym odczytaniu ciastek. • Parametr "wartość" - taka wartość będzie przechowana w ciasteczku o podanej nazwie. • Parametr czas_wygaśnięcia oznacza czas, po jakim ciastko zostanie skasowane. Czas ten należy podać jako ilość sekund od 1.1.1970. Aktualny czas w tym formacie zwracany jest przez funkcję time(). Przykłady: • godzina - time()+3600 • dzień - time()+86400 • miesiąc - time()+30*86400 • Jeśli czas będzie wcześniejszy niż aktualny czas, ciasteczko zostanie skasowane. Jeśli będzie równy zero - ciasteczko będzie ważne tylko do zamknięcia przeglądarki. • Dwa następne parametry używane są do wskazania adresu, dla którego dostępne będą cookiesy. Jeśli ostatni parametr jest ustawiony na 1, to cookie będzie przesłany za pomocą szyfrowanego połączenia HTTPS. Technologie internetowe II

  49. <?php // zapis $tablica = Array('a' => 'pierwszy', 'b' => 'drugi'); setcookie('tablica', serialize($tablica), time()+3600); // odczyt zabezpieczony przed nieistniejącym ciasteczkiem if (isset($_COOKIE['tablica'])) { $tablica = unserialize($_COOKIE['tablica']); } else { $tablica = Array(); } ?> Technologie internetowe II

  50. register_globals • Można ustawićw pliku konfiguracyjnym php.ini dyrektywę register_globals. • Odpowiedzialna za rejestrowanie danych otrzymanych z formularzy, ciastek, sesji czy serwera jako zmienne globalne. • 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. • Powoduje to pewne niebezpieczeństwo. Używając zmiennych globalnych nie można stwierdzić, czy dana wartość pochodzi z sesji czy została podana w URLu metodą GET – możliwość obchodzenia zabezpieczeń. • Zalecane jest używanie odpowiednich tablic. Począwszy od wersji 4.2.0, dyrektywa register_globals jest domyślnie wyłączona. Tak więc pisząc skrypt dla nieznanego serwera trzeba się liczyć z ewentualnością braku dostępu do zmiennych globalnych. Technologie internetowe II

More Related