Хотя переменная cookie автоматически пропадает, когда пользователь закры
вает браузер или когда срок ее действия истекает, порой возникает необходи
мость удалить cookie вручную. В частности, на сайтах, работающих с зареги
стрированными пользователями, все cookie удаляются, когда пользователь
отменяет свою регистрацию на этом ресурсе.
Хотя функция setcookie ( ) может принимать до шести аргументов, факти
чески для удаления требуется только один имя cookie. Присвоение перемен
ной cookie пустого значения то же самое, что удаление cookie с тем же име
нем. Например, если для создания cookie UserName необходимо написать такую
строку:
setcookie("UserName","Larry");
то для удаления переменной UserName нужна следующая запись:
setcookie("UserName","");
Ради предосторожности можно также задать срок действия, который уже
истек.
setcookie("UserName","",time()60);
Чтобы продемонстрировать эту возможность, добавим кнопку “Reset на
страницу cookies.php. Посланные ранее cookie будут стерты, и восстановятся
цвета по умолчанию.
Выполнение действия
- Откройте последнюю версию файла cookies.php в текстовом редакторе
(листинг 12.2). - Добавьте условную инструкцию в уже существующую условную конструк
цию if ($BeenSubmitted) (листинг 12.3, строки 38). - Закончите условную инструкцию if ($Reset).
- В HTMLформу добавьте триггерную кнопку, чтобы пользователь мог вер
нуть исходные цвета (листинг 12.3, строка 47). - Сохраните сценарий (листинг 12.3), загрузите его на сервер и протести
руйте в браузере (рис. 12.1112.13).
if ($Reset) {
setcookie("BGColor", "", time() "100");
setcookie ("TextColor", "" , time()"100");
$BGColor = "WHITE";
$TextColor = "BLACK";
} else {
Если форма отправлена, PHP сначала проверит, истинно ли значение пе
ременной $Reset. При положительном результате проверки сценарий удалит
существующие cookies, установив пустые значения cookie с теми же имена
ми. Сценарий также вернет значения цветов по умолчанию для данной стра
ницы.
setcookie("BGColor", "$NewBGColor", time()+ "1000000");
setcookie ("TextColor", "$NewTextColor", time()+ "1000000");
SBGColor = $NewBGColor;
$TextColor = $NewTextColor;
Если форма отправлена, а значение переменной $Reset ложно, форма долж
на быть обработана так же, как представлено в листинге 12.2.
<PxINPUT TYPE=Checkbox NAME=Reset VALUE=TRUE>Check this box to reset
—the colors.<P>
Эта кнопка будет сообщать, возвращать ли исходные значения. Я добавил
два тэга параграфа, чтобы HTMLформа выглядела эстетичней.
Листинг 12.3 т Для восстановления всех исходных значений посылаются
пустые переменные cookie с именами существующих. В HTMLформу добавля
ется также триггерная кнопка Reset.
1 <?php
I if ($BeenSubmitted) {
3 if ($Reeet) {
4 setcookie("BGColor", "", time() "100");
5 setcookie ("TextColor", "" , time()"100");
6 $BGColor = "WHITE";
7 $T«ctColor = "BLACK";
8 } else {
9 setcookie("BGColor", "$NewBGColor", time()+ "1000000"];
10 setcookie ("TextColor", "$NewTextColor"., timed + "1000000");v
II $BGColor = $NewBGColor;
12 $TextColor = $NewTextColor;
13 >
14 } else {
15 if (!$BGColor) {
16 $BGColor = "WHITE";
17 }
18 if (!$TextColor) {
19 $TextColor = "BLACK";
20 }
21 }
22 ?>
23 <HEAD>
24 <TITLE>User Customization</TITLE>
25 </HEAD>
26 <?php
27 print ("<BODY BGCOLOR=$BGColor TEXT=$TextColor>n");
28 ?>
29 Currently your page looks like this!
30 <FORM ACTION="cookies.php" METHOD=POST>
31 Select a new background color:
32 <SELECT NAME="NewBGColor">
33 <OPTION VALUE=WHITE>WHITE</OPTION>
34 <OPTION VALUE=BLACK>BLACK</OPTION>
35 <OPTION VALUE=BLUE>BLUE</OPTION>
36 <OPTION VALUE=RED>RED</OPTION>
37 <OPTION V ALUE=GREEN>GREEN</OPTION>
38 </SELECT>
39 Select a new text color":
40 <SELECT NAME"NewTextColor">"
41 <OPTION VALUE=WHITE>WHITE</OPTION>
42 <OPTION VALUE=BLACK>BLACK</OPTION>
43 <OPTION VALUE=BLUE>BLUE</OPTION>
44 <OPTION VALUE=RED>RED</OPTION>
45 <OPTION VALUE=GREEN>GREEN</OPTION>
46 </SELECT>
47 <PxINPUT TYPE=Checkbox NAME=Reset VALDE=TRUE>Check thie box to reset
the colors.<P>
48 <INPUT TYPE=HIDDEN NAME=BeenSubmitted VALUE=TRUE>
49 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
50 </FORM>
51 </BODY>
52 </HTML>
Для отладки функций setcookie () в рассмотренных выше сценариях не забудь
те включить опцию предупреждения о каждой установке cookie в вашем браузере
(рис. 12.1).
Функция setcookie () одна из немногих в РНР, которая может поразному ра
ботать в разных браузерах, так как они реагируют на cookie нестандартно. Для
достижения наилучших результатов протестируйте созданный сайт на различных
платформах с помощью разных браузеров.