Суперглобални масиви.Обработка на форми.Бисквитки и сесии

Програмиране и програмни езици Презентация

Слайд 1

Въведение в PHP
Суперглобални масиви.Обработка на форми. Бисквитки и сесии

Слайд 2

Суперглобални масиви
Асоциативни масиви, предварително дефинирани в PHP, които съхраняват променливите, получени от потребителския вход, средата или сървъра
Достъпни са ( т.е имат обхват) навсякъде

Слайд 3

Суперглобален масив $GLOBALS
PHP обезпечава алтернативна възможност за достъп до променливите с глобален обхват:
Всички променливи от глобалното пространство се записват в масива $GLOBALS, като за ключ за достъп използваме името на променливата.
<?php
$foo = "Some value.";
function test()
{
echo $GLOBALS['foo'];
}
test();
?>

Слайд 4

Суперглобален масив $_SERVER
$_SERVER съхранява информация за сървъра и текущия скрипт, IP адреса на посетителя, сайта, препратил го към текущия скрипт и др.

<?php
echo "<h1> Welcome to $_SERVER[HTTP_HOST]! </h1>";
?>

Слайд 5

Някои $_SERVER елементи
PHP_SELF: Filename of the currently executing script, relative to the document root
SERVER_NAME: Name of the server host
DOCUMENT_ROOT: Document root directory under which the current script is executing
HTTP_HOST : Returns the Host header from the current request
HTTP_REFERER: page that referred the user agent to the current page (not available with all user agents)
HTTP_USER_AGENT: Contents of the User-Agent such as Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)
SCRIPT_FILENAME: Absolute pathname of the currently executing script
SCRIPT_NAME: Current script's path
REQUEST_URI: URI used to access this page; for instance /index.html

Слайд 6

Пример: $_SERVER данни

Слайд 7

Суперглобален масив $_GET
Данните по метода GET се изпращат чрез низ-заявкa в URL адреса, например:
http://example.com?var1=somevalue&var2=othervalue

arrays_gl_get.php
<?php
echo "var1: ", $_GET['var1'], "<br />";
echo "var2: ", $_GET['var2'], "<br />";
?>
http://localhost/php/arrays_gl_get.php?var1=somevalue&var2=anothervalue

var1: somevalue
var2: anothervalue
test_get.php

Слайд 8

Пример за използване на $_GET - get.php

Слайд 9

Изпълнение на get.php

Слайд 10

Суперглобален масив $_POST
При изпращане на информация чрез форми най-често се използва метода POST
Използването на данните, изпратени по този начин е аналогично: в суперглобалния масив $_POST променливите са достъпни чрез имената си

test_post.php

Слайд 11

Пример за използване на $_POST

Слайд 12

post.php - изпълнение

Слайд 13

Обработка на форми
Изпълнява се лесно в PHP, т.к. параметрите на формата се намират в масивите $_GET и $_POST
Преговор:
GET заявките кодират параметрите на формата в URL в т.н. низ на заявката (а query string), текстът, следващ ? е низът на заявката
POST заявките подават параметрите на формата в тялото на заявката, URL остава непроменен
Съществената разлика според HTTP спецификацията е, че get-заявките са idempotent, което означава, една GET заявка за даден URL, включваща параметрите на формата, винаги е една и съща
Браузерите могат да кешират страниците-отговор на GET заявките, т.к. те не се променят от зареждане към зареждане
get –заявките следва да се използват за задачи, при които страницата-отговор на сървъра не се променя, не записват в бази данни
POST заявките не са idempotent
Не могат да се кешират, всеки път се подават на сървъра ( въпрос “Repost form data?”)
POST заявките са подходящият избор за заявки, отговорът на които може да се изменя с времето

Слайд 14

Проверка на метода, използван за заявка на php страница
Методът се съхранява в $_SERVER['REQUEST_METHOD']
Типично използване
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
// обработка на GET заявка
}
else {
die("можете само да прочетете тази страница.");
}

Слайд 15

Параметри на формата
За достъп до параметрите на формата в php кода се използват масивите $_POST, $_GET, $_FILES
За ключове се използват имената на параметрите, а за значения – техните значения
Тъй като точките са допустими имена на HTML полета, но не и на променливи в PHP, точките в имената на полетата се заменят с (_)

Слайд 16

Пример: Разделяне на дума на части 1/2
<html>
<head><title>Chunkify Form</title></head>
<body>
<form action="chunk.php" method="POST">
Enter a word: <input type="text" name="word" /><br />
How long should the chunks be?
<input type="text" name="number" /><br />
<input type="submit" value="Chunkify!">
</form>
</body>
</html>
chunk.html

Слайд 17

Пример: Разделяне на дума на части 2/2
<?php
$word = $_POST['word'];
$number = $_POST['number'];
$chunks = ceil(strlen($word) / $number);
echo "The {$number}-letter chunks of '{$word}' are:<br />\n";
for ($i = 0; $i < $chunks; $i++) {
$chunk = substr($word, $i * $number, $number);
printf("%d: %s<br />\n", $i + 1, $chunk);
}
?>
chunk.php

Слайд 18

Самообработващи се форми
Една и съща PHP страница може да се използва за генерирана на формата и за обработката й:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">…

Пример: tempFC.php
Ако страницата е извикана с GET заявка:
http://localhost/php/tempFC.php?fahrenheit=100
се използва подаденото значение и се превръща в градуси по Целзий
В противен случай се показва форма за въвеждане на градусите по Фаренхайт и обработката става след щракането на бутона

Слайд 19

“Sticky” форми
Често използван прийом в уеб е резултатите от предидущата заявка да се показват като подразбиращи се за следващата
Пример: sticky.php

<?php if( isset ($_GET['fahrenheit']) ) {$fahrenheit = $_GET['fahrenheit'];}
else $fahrenheit=0; ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET">
Teмпература по Фаренхайт:
<input type="text" name="fahrenheit" value="<?php echo $fahrenheit; ?>" /><br />
<input type="submit" value="Превърни в градуси по Целзий!" />
</form>

Слайд 20

Параметри с няколко значения
В списъците за избор на HTML, създадени с тага select, е възможен избор на няколко значения
За обезпечаване приемането на няколко значения, които браузерът изпраща на скрипта за обработка на формата, името на полето на формата трябва да завършва с [].
Пример:
<select name="languages[]">
<option name="c">C</input>
<option name="c++">C++</input>
<option name="php">Java</input>
<option name="perl">PHP</input>
</select>
След приемане на $_GET['languages'] вместо единично значение ще съдържа масив от значенията, избрани от потребителя

Слайд 21

Пример: параметри с няколко значения
persAttr1.php
persAttr2.php

Слайд 22

Управление на състоянието
Протоколът HTTP не съхранява информация за състоянието
след изпълнение нa клиентската заявка, връзката между клиента и сървъра се прекъсва
сървърът не разпознава заявките, произтичащи от един и същ клиент
В много случаи информация за състоянието е необходима
Съществуват различни техники за проследяване на състоянието между отделните заявки (session tracking).
Най-разпространения подход е използването на бисквитки cookies
“cookie” е порция информация, която сървърът изпраща на клиента
При всяка следваща заявка клиентът връща тази информация обратно на сървъра, като по този начин се идентифицира
Препоръчителен начин за управление на състоянието с PHP е използването на вградената система за проследяване на сесиите (session-tracking system)

Слайд 23

Използване на “бисквитки” 1/3
Малък файл, съхраняван на клиентския компютър, съхраняващ данни, свързани с потребителя
Сървърът може да изпрати на браузера една или няколко бисквитки в хедърите на отговора.
За изпращане бисквитки към браузера се използва функцията setcookie()
setcookie(name [, value [, expire [, path [, domain [, secure ]]]]]);
Създава низа на бисквитката от зададените аргументи и създава хедъра Cookie със значение този низ
Бисквитките се изпращат като хедъри на отговора, затова setcookie() трябва да се извика преди изпращането на коя да е част от тялото
Пример:
setcookie("lastvisit", date("H:i:s"), time() + 60*60);

Слайд 24

Използване на “бисквитки” 2/3
Параметри на setcookie()
name - уникално име, не трябва да съдържа интервали и ;
value - произволен низ, прикрепен към cookie
Оригиналната Netscape спецификация ограничава пълния размер на cookie до 4 KB,затова ако няма специфични ограничения значението не трябва да е по-голямо от 3.5 KB.
еxpire - датата на валидност на cookie. Ако не е зададена, браузерът съхранява cookie в паметта (не на диска) и изчезва след затваряне на браузета. Датата на валидност се задава в секунди след полунощ на January 1, 1970 (GMT).
time() + 60 * 60 * 10 – срок 10 часа.
path - браузерът връща cookie само за този URLs и дъщерните му
Подразбираща е директорията на текущата страница
domain – браузерът връща cookie само за URLs в този домейн
Подразбира се името на хоста
secure – браузерът обменя cookie само при https връзка
по подразбиране false, т.е. може да е изпращат cookie при небезопасна връзка

Слайд 25

Използване на “бисквитки” 3/3
Когато браузерът изпраща cookie обратно към сървъра, достъпът до него става чрез масива $_COOKIE
Ключът е името на cookie, а значението – значението на полето му value
if (isset($_COOKIE['lastvisit']))
echo "Last visit: " . $_COOKIE['lastvisit'];
Пример: проследяване колко пъти страницата е посетена от даден клиент

$pageAccesses = $_COOKIE['accesses'];
setcookie('accesses', ++$pageAccesses);

Пример: colors.php
prefs.php
prefs_demo.php

Слайд 26

Сесии: основни понятия 1/3
Предоставят начин за използване на променливи, видими в различните страници. Данните се съхраняват на сървъра.
Вместо да съхраняват възможно голям обем данни в браузера на посетителя, php сесиите позволяват да се съхраняват данни на уеб-сървъра
При първото си посещение всеки потребител получава уникален ID на сесията – низ, идентифициращ потребителя по време на посещението на сайта
По подразбиране ID на сесията се съхранява в бисквитката PHPSESSID.
Ако бисквитките са изключени, ID на сесията се записва във URL адресите на сайта.
Тoзи ID се използва при следващите заявки за страницата и при зареждането на данните, свързани със сесията
Чрез временни файлове, разположени на сървъра, PHP следи променливите, регистрирани по време на сесията и техните значения
Регистрираните променливи се запазват между отделните страници и промени направени на една страница са видими от другите

Слайд 27

Сесии: основни понятия 2/3
Стартиране на сесия
<?php session_start(); ?>
Записва бисквитка на клиентския компютър, съдържаща ID, асоциирано с клиента през сесията.
Ако вече е започната сесия, тя се възстановява

Слайд 28

Сесии: основни понятия 3/3
Сесиите се стартират автоматично при стартиране на скрипта
Може да регистрираме променлива в рамките на сесията, като я запишем в масива $_SESSION[]
Пример: брояч на посещенията
session_start();
$_SESSION['hits'] = $_SESSION['hits'] + 1;
echo "This page has been viewed {$_SESSION['hits']} times.";
Функцията session_start() зарежда регистрираните променливи в асоциативния масив $_SESSION
Ключовете са имената на променливите (например $_SESSION['hits']).
session_id() връща текущия ИД на сесията.
За да приключим сесията, извикваме session_destroy().
Тази команда премахва съхранените данни, но не премахва бисквитките от браузера. Това означава че в следващи посещения потребителят ще има същото ИД преди да извика session_destroy(), но не и данните.

Преглед на началото - целият файл след изтегляне

Описание

Дисциплина: Програмиране в Интернет

0 коментара

Все още няма коментари. Бъдете първият, който ще коментира.

За да коментирате, трябва да сте влезли в профила си.

Влезте