500 likes | 651 Views
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
E N D
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 • http://docs.wsei.pl/dydaktyka/Techn_Internet_II_wyklad3.ppt Technologie internetowe II
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
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
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
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
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
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
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
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
Wynik Technologie internetowe II
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
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
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
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
Wynik Technologie internetowe II
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
Łą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
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
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
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
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
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
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
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
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
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
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
Wynik Technologie internetowe II
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
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
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
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
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
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
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
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
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
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
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
<?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
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