Поиск

Добавление параметров в cookie

Хотя имени переменной и ее значения в функции setcookieO вполне доста точно в большинстве случаев, разрешается добавлять в функцию и другие аргу менты. Функция может принимать до шести аргументов, каждый их которых накладывает какоето ограничение на переменную cookie:

setcookie("name","value"
,"expiration","path","domain","secure");

Аргумент expiration используется, чтобы можно было задать срок суще ствования cookie. Если он не определен, cookie будет функционировать, пока пользователь не закроет браузер. Обычно время жизни cookie задается в секундах, начиная с настоящего момента. Эта строка кода задаст время жизни cookie в один час (60 секунд умножить на 60 минут) с настоящего момента:

setcookie)"name","value",time()+3600);

В данном примере время жизни рассчитывается как значение time ( ) плюс 3600, оба слагаемых даны в секундах. Аргумент не взят в кавычки (нам надо отправить не строку time ( ) + 3600, а именно результат этого сложения). Аргументы path и domain используются для ограничения cookie пределами конкретного домена или определенного каталога на сайте. Например, можно задать срок жизни cookie, а затем указать, что переменная будет существовать, только пока пользователь работает со своим каталогом домена:

setcookie("name","value",time()+3600,"/user/");

Аргумент secure заставляет посылать cookie только по защищенному про токолу HTTPS. Единица означает, что должен быть использован защищенный протокол, нуль указывает на то, что это необязательно. Защищенные протоко лы обычно используются на сайтах электронной коммерции.

s e t c o o k i e ( " n a m e " , " v a l u e "
, t i m e ( ) + 3 6 0 0 , " " , " " , "1") ;

Как и в других функциях, принимающих аргументы, все значения необхо димо передавать по порядку. В последнем примере мы не указали путь и домен, оставив кавычки пустыми. Таким образом, мы сохранили соответствующее ко личество аргументов, указав при этом, что необходимо использовать протокол HTTPS.

Добавим срок жизни в существующую страницу cookies.php, чтобы задан ные пользователем параметры сохранились после закрытия браузера. Задание срока жизни cookie

  1. Откройте файл cookies.php в текстовом редакторе (листинг 12.1).
  2. Во второй и третьей строках укажите срок жизни, равный нескольким дням или больше:
  3. setcookie("BGColor", "$NewBGColor", time()+ "10000000");
    setcookie(."TextColor", "$NewTextColor", time()+ "10000000");

    Если задать срок жизни как time() + "10000000", cookie будет существовать около 116 дней (60 секунд х 60 минут х 24 часа х 115 дней = 10000GOO).

  4. Сохраните сценарий (листинг 12.2), загрузи те его на сервер и протестируйте в браузере (рис. 12.9 и 12.10).
  5. Листинг 12.2 т Добавив аргумент срока жиз ни в cookies, мы обеспечили их существование даже после того, как пользователь закроет Web браузер

    1 <?php
    2 if ($BeenSubmitted) {
    3 eetcookie("BGColor", "$NewBGColor", time() + "10000000");
    4 eetcookieC'TextColor", "$NewTextColor", time()+ "10000000");
    5 $BGColor = $NewBGColor;
    6 $TextColor = $NewTextColor;
    7 } else {
    8 if (!$BGColor) {
    9 $BGColor .= "WHITE";
    10 }
    11 if (!$TextColor) {
    12 $TextColor = "BLACK";
    13 }
    14 }
    15 ?> '
    16 <HEAD>
    17 <TITLE>User Customization</TITLE>
    18 </HEAD>
    19 <?php
    20 print ("<BODY BGCOLOR=$BGColor TEXT=$TextColor>\n");
    21 ?>
    22 Currently your page looks like this!
    23 <FORM ACTION="cookies.php" METHOD=POST>
    24 Select a new background color:
    25 <SELECT NAME="NewBGColor">
    26 <OPTION VALUE=WHITE>WHITE</OPTION>
    27 <OPTION VALUE=BLACK>BLACK</OPTION>
    28 <OPTION VALUE=BLUE>BLUE</OPTION>
    29 <OPTION VALUE=RED>RED</OPTION>
    30 <OPTION VALUE=GREEN>GREEN</OPTION>
    31 </SELECT>
    32 Select a new text color:
    33 <SELECT NAME="NewTextColor">
    34 <QPTION VALUE=WHITE>WHITE</OPTION>
    35 <OPTION VALUE=BLACK>BLACK</OPTION>
    36 <OPTION VALUE=BLUE>BLUE</OPTION>
    37 <OPTION VALUE=RED>RED</OPTION>
    38 <OPTION VALUE=GREEN>GREEN</OPTION>
    39 </SELECT>
    40 <INPUT TYPE^HIDDEN NAME=BeenSubmitted VALUE=TRUE>
    41 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    42 </FORM>
    43 </BODY>
    44 </HTML>

    В определенных версиях браузеров Netscape и Internet Explorer возникают пробле мы с cookie, в которых не использованы все аргументы. Если вы считаете, что по добные проблемы могут случиться и на вашем сайте, передавайте все аргументы, используя пустые кавычки для значений по умолчанию:

    setcookie("BGColor", "$NewBGColor",
    t i m e ( )+ "10000000" , " " , " " , " " ) ;

    На самом деле разрешается задавать любые сроки жизни cookie. Однако стоит придерживаться следующих советов: если переменная cookie должна действовать только до конца сессии, не задавайте этот параметр; если желательно хранить на стройки пользователя до его следующих посещений сайта, задайте время жизни cookie, равное нескольким месяцам; если же cookie может подвергнуть риску тща тельно охраняемую информацию, время жизни должно составлять час или мень ше, чтобы cookies долго не хранились после того, как пользователь покинул сайт. В целях безопасности срок жизни cookie можно устанавливать равным пяти или десяти минутам и задавать переменную заново каждый раз, когда пользователь заходит на новую страницу. Таким образом, идентификатор будет существовать, пока пользователь активен, и автоматически уничтожится через пять или десять минут после последнего действия пользователя.