Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

информационных технологий» 8 глава




value– текст, который будет рассматриваться как значение Cookie. “тот текст должен быть URL-кодирован.

expires – необязательная пара expires=дата задает время жизни Cookie. Cookie самоуничтожится, как только наступит указанная дата. Например, если задать expires=Friday,31-Dec-09 23:59:59 GMT, то «печенье» будет «жить» только до 31 декабря 2009 года. Если этот параметр не указан, то временем жизни будет считаться вся текущая сессия работы браузера, до того момента, как пользователь его закроет.

domain– параметр domain=имя_хоста задает имя хоста, с которого установили Cookie. Его можно менять вручную, прописав нужный адрес, и таким образом «подарить» Cookie другому хосту. Только в том случае, если параметр не задан, имя хоста определяется браузером автоматически.

path– параметр path=путь описывает каталог (точнее, URI), в котором расположен сценарий, установивший Cookie. Этот параметр также можно установить вручную, записав в него не только каталог, а вообще все, что угодно. Однако указав хост, отличный от хоста сценария, или путь, отличный от URI каталога (или родительского каталога) сценария, тем самым никогда больше не увидим Cookie в этом сценарии.

secure параметр связан с защищенным протоколом передачи HTTPS. Он используется при написании сценария для проведения банковских операций с кредитными карточками (или иные, требующие повышенной безопасности).

Значения всех параметров Cookie должны быть URL-кодированы.

Получение Cookies из браузера. Все Cookies хранятся в переменной окружения HTTP_COOKIE в таком же формате, как и QUERY_STRING, только вместо & используется;. Например, если установили два Cookies: cookie1=value1 и cookie2=value2, то в переменной окружения HTTP_COOKIE будет следующее:

cookie1=value1;cookie2=value2.

Сценарий должен разобрать эту строку, распаковать ее и затем работать по своему усмотрению.

Установка Cookie в PHP. Так как Cookie фактически представляет собой обычный заголовок, сделать это можно только перед первой командой вывода в сценарии.

· int setcookie(string $name [,string $value] [,int $expire][,string $path] [,string $domain] [,book $secure])

Вызов SetCookie() определяет новый Cookie, который тут же посылается браузеру вместе с остальными заголовками. Все аргументы, кроме имени, необязательны. Если задан только параметр $name (имя Cookie), то Cookie с указанным именем у пользователя удаляется. Можно пропускать аргументы, которые не нужно задавать, заменяя их пустыми строками "". Аргументы $expire и $secure, не могут быть представлены строками, а потому вместо пустых строк здесь нужно использовать 0. Параметр $expire задает timestamp, который, например, может быть сформирован функциями time() или mktime(). Параметр $secure говорит о том, что величина Cookie может передаваться только через безопасное HTTPS-соединение.

Примеры использования SetCookie():

// Cookie на одну сессию, т. е. до закрытия браузера

SetCookie("TestCookie","Test Value");

// Эти Cookies уничтожаются браузером через 1 час после установки

SetCookie("TestCookie",$val,time()+3600);

SetCookie("TestCookie",$val,time()+3600,

"/~rasmus/",".utoronto.ca",1);

После вызова функции SetCookie() только что созданный Cookie сразу появляется среди глобальных переменных как переменная с заданным в параметре $name именем. Она появится и при следующем запуске сценария – даже если SetCookie() в нем и не будет вызвана. Параметр $value автоматически URL-кодируется при посылке на сервер, а при получении Cookie – автоматически декодируется, как это происходит и с данными формы.

Пример: счетчик посещения страницы конкретным посетителем. Запуская данный сценарий, пользователь будет видеть, сколько раз он уже гостил на странице.

Индивидуальный счетчик посещений:

if(!isSet($Counter)) $Counter=0;

$Counter++;

SetCookie("Counter",$Counter,0x7FFFFFFF);

echo "Вы запустили этот сценарий $Counter раз!";

Если понадобится сохранять в Cookies не только строки, но и сложные объекты, то объект нужно сначала преобразовать в строку (например, при помощи Serialize()) и поместить ее в Cookie. А потом, наоборот, распаковать строку, используя Unserialize(). Если сохраняемый массив имеет небольшой размер, каждый его элемент можно разместить в отдельном Cookie:

SetCookie("Arr[0]","aaa");

SetCookie("Arr[1]","bbb");

SetCookie("Arr[2][0]","ccc"); // многомерный массив

По сути, Cookie с именем Arr[0] ничем не отличается с точки зрения браузера и сервера от обычного Cookie. Зато PHP, получив Cookie с именем, содержащим квадратные скобки, поймет, что это на самом деле элемент массива, и создаст его (массив).

В большинстве браузеров число Cookies, которые могут быть установлены одним сервером, ограничено, причем ограничено именно их количество, а не суммарный объем. Поэтому лучше будет воспользоваться функцией Serialize() и установить один Cookie.

Получение Cookie в PHP. Предположим, сценарий отработал и установил какой-то Cookie, например, с именем Cook и значением Val. В следующий раз при запуске этого сценария ему передастся пара типа Cook=Val (через специальную переменную окружения). PHP это событие перехватит и автоматически создаст переменную $Cook со значением Val. То есть интерпретатор действует точно так же, как если бы значение Cookie пришло из формы. Та переменная, которую установили в прошлый раз, будет доступна и сейчас!

Авторизация. Часто бывает нужно, чтобы на какой-то URL могли попасть только определенные пользователи. А именно, только те, у которых есть зарегистрированное имя (login) и пароль (password). Механизм авторизации призван упростить проверку данных таких пользователей. Рассмотрим один из самых простых типов авторизации – basic-авторизацию. Предположим, что сценарий посылает браузеру пользователя следующий заголовок:

WWW-Authenticate: Basic realm="имя_зоны"

HTTP/1.0 401 Unauthorized"

Строка имя_зоны задает идентификатор, который будет определять, к каким ресурсам будет разрешен доступ зарегистрированным пользователям. При программировании CGI-сценариев этот параметр используется в основном для формирования приветствия (подсказки) в диалоговом окне, появляющемся в браузере пользователя (там отображается имя зоны).

Затем посылается тело документа. В браузере пользователя появляется диалоговое окно, в котором предлагается вести login и password. После того как пользователь это сделает, управление передается обратно серверу, который среди обычных заголовков запроса получает примерно такой:

Authorization: Basic TG9naW46UGFzcw==

Это закодированные данные, введенные пользователем. Далее этот заголовок должен передаться сценарию. Сценарий, декодировав его, может решить: то ли повторить всю процедуру сначала (если имя или пароль неправильные), или же начать работать с сообщением «OK, все в порядке, вы – зарегистрированный пользователь».

Предположим, что сценарий подтвердил верность данных и «пропустил» пользователя. В этом случае происходит еще одна вещь: login и password пользователя запоминаются в скрытом Cookie, «живущем» в течение одной сессии работы с браузером. Затем, заголовок

Authorization: Basic значение_Cookie

будет присылаться для любого сценария (и даже для любого документа) на сервере. Таким образом, посетителю, зарегистрировавшемуся однажды, нет необходимости каждый раз заново набирать свое имя и пароль в течение текущего сеанса работы с браузером, т. е., пока пользователь его не закроет.

После верной авторизации при вызове любого сценария будет установлена переменная окружения REMOTE_USER, содержащая имя пользователя.

SSI и функция virtual(). Для одного и того же документа в Apache нельзя применять два «обработчика». Иными словами, действует принцип: либо PHP, либо SSI (Server-Side Includes – включения на стороне сервера). Однако в PHP имеются определенные средства для «эмуляции» SSI-конструкции

· include virtual

Конструкция include virtual загружает файл, URL которого указан у нее в параметрах, обрабатывает его нужным обработчиком и выводит в браузер. То есть все происходит так, будто указанный URL был затребован виртуальным браузером. Большинство SSI-файлов ограничиваются использованием этой возможности.

· int virtual(string $url)

Функция virtual() представляет собой процедуру, которая может поддерживаться только в случае, если PHP установлен как модуль Apache. Она делает то же самое, что и SSI-инструкция <!--#include virtual=...-->, т.е. она генерирует новый запрос серверу, обрабатываемый им обычным образом, а затем выводит данные в стандартный поток вывода.

Чаще всего функция virtual() используется для запуска внешних CGI-сценариев, написанных на другом языке программирования, или же для обработки SSI-файлов более сложной структуры. Для включения обычных PHP-файлов с участками кода функция virtual() неприменима – это выполняет оператор include.

 


Тема 13 Управление интерпретатором

и сессиями

 

13.1 Управление интерпретатором

13.2 Управление сессиями

 

13.1 Управление интерпретатором

PHP имеет множество различных настроечных параметров, которые иногда приходится изменять или проверять.

Информационные функции:

· int phpinfo()

Функция выводит в браузер настройки PHP и параметры вызова сценария: версия PHP; опции, которые были установлены при компиляции PHP; информация о дополнительных модулях; переменные окружения, в том числе и установленные сервером при получении запроса от пользователя на вызов сценария; версия операционной системы; состояние основных и локальных настроек интерпретатора; HTTP-заголовки; лицензия PHP. Пример:

<?

phpinfo();

?>

Функция phpinfo() в основном применяется при первоначальной установке PHP для проверки его работоспособности.

· string phpversion()

Функция возвращает текущую версию PHP.

· int getlastmod()

Функция возвращает время последнего изменения файла, содержащего сценарий. Она учитывает время изменения только главного файла, того, который запущен сервером, но не файлов, которые включаются в него директивами require или include. Время возвращается в формате timestamp (то есть, это число секунд, прошедших с 1 января 1970 года до момента модификации файла), и затем оно может быть преобразовано в читаемую форму. Пример:

echo "Последнее изменение: ".date("d.m.Y H:i.s.", getlastmod());

// Выводит 'Последнее изменение: 13.11.2008 11:23.12'

Настройка параметров PHP. Все параметры находятся в файле php.ini. Задаются они в формате параметр=значение, на одной строке может определяться только один параметр. Любые символы, расположенные после; и до конца строки, игнорируются (точка с запятой – это признак начала комментария). Если PHP установлен как модуль Apache, можно задавать настройки PHP в главном конфигурационном файле сервера httpd.conf или в файлах.htaccess. Для этого перед именем каждого параметра нужно поставить префикс php_ и разделять имя параметра и его значение не знаком равенства, а пробелом. Списк настроечных директив PHP:

· error_reporting

Устанавливает уровень строгости для системы контроля ошибок PHP. Значение этого параметра должно быть целым числом, которое интерпретируется как десятичное представление двоичной битовой маски. Установленные в 1 биты задают, насколько детальным должен быть контроль. Можно использовать константы: 1 – E_ERROR – фатальные ошибки; 2 – E_WARNING – общие предупреждения; 4 – E_PARSE – ошибки трансляции; 8 – E_NOTICE – предупреждения; 16 – E_CORE_ERROR – глобальные предупреждения; 32 – E_CORE_WARNING – глобальные ошибки.

Наиболее часто встречающееся сочетание – 7 (1+2+4), которое задает полный контроль, кроме некритичных предупреждений интерпретатора (таких, например, как обращение к неинициализированной переменной). Оно часто задается по умолчанию при установке PHP.

· magic_quotes_gpc on|off

Эта настройка указывает PHP, нужно ли ему ставить дополнительный слэш перед всеми апострофами ', кавычками ", обратными слэшами \ и нулевыми символами (0) при приеме данных из браузера пользователя – например, поступивших из формы.

· max_execution_time

Директива устанавливает время (в секундах), через которое работа сценария будет принудительно прервана. Используется для того, чтобы запретить пользователям захватывать слишком много ресурсов центрального процессора и избежать «зависания» сценария.

· track_vars on|off

Если этот параметр установлен в On, все данные, доставленные методами GET и POST, а также Cookies, будут дополнительно помещены в глобальные массивы $HTTP_GET_VARS, $HTTP_POST_VARS и $HTTP_COOKIE_VARS соответственно.

Контроль ошибок. Одна из самых сильных черт PHP – возможность отображения сообщений об ошибках прямо в браузере. В зависимости от состояния интерпретатора сообщения будут либо выводиться в браузер, либо подавляться. Для установки режима вывода ошибок служит функция Error_Reporting().

· int Error_Reporting([int $level])

Устанавливает уровень строгости системы контроля ошибок PHP, т. е. величину параметра error_reporting в конфигурации PHP.

Оператор отключения ошибок. Если оператор @ поставить перед любым выражением, то все ошибки, которые там возникнут, будут проигнорированы. Пример:

if(!@filemtime("notextst.txt"))

echo "Файла не существует!";

Если убрать оператор @ – получите сообщение: «Файл не найден», а только после этого – вывод оператора echo. С оператором @ предупреждение будет подавлено.

Пример использования оператора @. Пусть имеется форма с submit-кнопкой, и нужно в сценарии определить, нажата ли она.

1-ый способ:

<?

if(!empty($submit)) echo "Кнопка нажата!";

?>

2-ой способ:

<?

if(@$submit) echo "Кнопка нажата!"

?>

<form action=<?=$SCRIPT_NAME?> method=post>

<input type=submit name=submit value="Go!">

</form>

Принудительное завершение программы

· void exit()

Функция завершает работу сценария. Перед окончанием программы вызываются функции-финализаторы.

· void die(string $message)

Функция делает почти то же самое, что и exit(), только перед завершением работы выводит строку, заданную в параметре $message. Ее применяют, если нужно напечатать сообщение об ошибке и аварийно завершить программу. Пример:

$filename='/path/to/data-file';

$file=fopen($filename, 'r') or die("не могу открыть файл $filename!");

Финализаторы. Разработчики PHP предусмотрели возможность указать в программе функцию-финализатор, которая будет автоматически вызвана, как только работа сценария завершится. В такой функции можно, например, записать информацию в кэш или обновить файл журнала работы программы. Для этого нужно во-первых, написать саму функцию и дать ей любое имя; во-вторых зарегистрировать ее как финализатор, передав ее имя стандартной функции Register_shutdown_function().

· int Register_shutdown_function(string $func)

Регистрирует функцию с указанным именем, чтобы она автоматически вызывалась перед возвратом из сценария. Функция будет вызвана как при окончании программы, так и при вызовах exit() или die(), а также при фатальных ошибках, приводящих к завершению сценария – например, при синтаксической ошибке.

Можно зарегистрировать несколько финальных функций, которые будут вызываться в том же порядке, в котором они регистрировались. Однако финальная функция вызывается уже после закрытия соединения с браузером клиента.

Генерация кода во время выполнения. Так как PHP является транслирующим интерпретатором, в нем заложены возможности по созданию и выполнению кода программы прямо во время ее выполнения. То есть можно писать сценарии, которые в буквальном смысле создают сами себя, точнее, свой код! Это незаменимо при написании шаблонизаторов и функций, занимающихся динамическим формированием писем.

Выполнение кода

· int eval(string $code)

Функция берет параметр $st и, рассматривая его как код программы на PHP, запускает. Если этот код возвратил какое-то значение оператором return, eval() также вернет эту величину. Параметр $st представляет собой строку, содержащую участок PHP-программы. То есть в ней может быть все, что допустимо в сценариях: ввод-вывод, в том числе закрытие и открытие тэгов <? и?>; управляющие инструкции: циклы, условные операторы и т. д.; объявления и вызовы функций; вложенные вызовы функции eval().

При этом нужно помнить несколько важных правил:

1 Код в $st будет использовать те же самые глобальные переменные, что и вызвавшая программа. Т.е. переменные не локализуются внутри eval().

2 Любая критическая ошибка в коде строки $st приведет к завершению работы всего сценария. Это значит, что нельзя перехватить все ошибки в коде, вставив его в eval(). Синтаксические ошибки и предупреждения, возникающие при трансляции кода в $st, не приводят к завершению работы сценария, а лишь вызывают возврат из eval() значения ложь.

Нельзя забывать, что переменные в строках, заключенных в двойные кавычки, в PHP интерполируются (то есть заменяются на соответствующие значения). Нужно применять строки в апострофах для параметра, передаваемого eval(). Пример:

eval("$a=$b;"); // Неверно!

eval("\$a=\$b");// Вы хотели написать так

eval('$a=$b'); // но так будет короче

Сила функции eval() заключается в том, что параметр $st может являться не статической строковой константой, а сгенерированной переменной.

Генерация функций.

· string create_function(string $args,

string $code)

Создает функцию с уникальным именем, выполняющую действия, заданные в коде $code (это строка, содержащая программу на PHP). Созданная функция будет принимать параметры, перечисленные в $args. Возвращаемое значение представляет собой уникальное имя функции, которая была сгенерирована. Примеры:

$Mul=create_function('$a,$b', 'return $a*$b;');

$Neg=create_function('$a', 'return -$a;');

echo $Mul(10,20); // выводит 200

echo $Neg(2); // выводит -2

Проверка синтаксической корректности кода. С помощью create_function() можно проверить, является ли некоторая строка верным PHP-кодом, не запуская при этом сам код. Если создание функции с телом – заданной строкой – прошло успешно, значит, код синтаксически корректен. Пример:

$fname="file.php";

$code=join("",File($fname));

if(create_function("","?>$code<?"))

echo "Файл $fname является программой на PHP";

else

echo "Файл $fname – не PHP-сценарий";

Другие функции:

· void usleep(int $micro_seconds)

Вызов этой функции позволяет сценарию «замереть» не указанное время (в микросекундах). Существует также функция sleep(), которая принимает в параметрах не микросекунды, а секунды, на которые нужно задержать выполнение программы.

· int uniqid(string $prefix)

Функция uniqid() возвращает строку, при каждом вызове отличающуюся от результата предыдущего вызова. Параметр $prefix задает префикс (до 114 символов длиной) этого идентификатора.

13.2 Управление сессиями

Сессии представляют собой механизм, позволяющий хранить некоторые (и произвольные) данные, индивидуальные для каждого пользователя (например, его имя и номер счета), между запусками сценария. Термин «сессия» является транслитерацией от английского слова session, что в буквальном переводе должно бы означать «сеанс». Фактически, сессия – это некоторое место долговременной памяти (обычно часть на жестком диске и часть – в Cookies браузера), которое сохраняет свое состояние между вызовами сценариев одним и тем же пользователем. Поместив в сессию переменную (любой структуры), при следующем запуске сценария получим ее в целости и сохранности.

Зачем нужны сессии? В Web-программировании есть класс задач, который может вызвать много проблем, если писать сценарии «в лоб». Речь идет о невозможности запустить программу на длительное время, позволив ей при этом обмениваться данными с пользователями.

Сценарии должны запускаться, моментально выполняться и возвращать управление системе. Пусть нужно написать форму, содержащую большое число полей, которую было бы глупо поместить на одну страницу. Нужно разбить процесс заполнения формы на несколько этапов, и представить их в виде отдельных HTML-документов. В первом документе с диалогом у пользователя может запрашиваться его имя и фамилия, во втором (если первый был заполнен верно) – данные о его месте жительства, и в третьем – номер кредитной карточки.

В любой момент можно вернуться на шаг назад, чтобы исправить те или иные данные. Если все в порядке, накопленная информация обрабатывается – например, помещается в базу данных.

Реализация такой схемы оказывается для Web-приложений довольно нетривиальной проблемой. Действительно, придется хранить все ранее введенные данные в каком-нибудь временном хранилище, которое должно аннулироваться, если пользователь вдруг передумает и «уйдет» с сайта. Для этого можно использовать функции сериализации и файлы. Однако ими проблема решается только наполовину: нужно также привязывать конкретного пользователя к конкретному временному хранилищу. Эти проблемы решаются с применением сессий PHP.

Механизм работы сессий. Должен существовать механизм, который бы позволил PHP идентифицировать каждого пользователя, запустившего сценарий. То есть при следующем запуске PHP нужно однозначно определить, кто его запустил: тот же человек, или другой. Делается это путем присвоения клиенту так называемого уникального идентификатора сессии. Чтобы этот идентификатор был доступен при каждом запуске сценария, PHP помещает его в Cookies браузера. Использовать Cookies не обязательно, существует и другой способ.

Зная идентификатор (будем называть его SID), PHP может определить, в каком же файле на диске хранятся данные пользователя. Чтобы сохранять переменную (обязательно глобальную) в сессии нужно ее зарегистрировать с помощью специальной функции. После регистрации при следующем запуске сценария тем же пользователем она получит то же самое значение, которое было у нее при предыдущем завершении программы. Это произойдет потому, что при завершении сценария PHP автоматически сохраняет все переменные, зарегистрированные в сессии, во временном хранилище. Можно в любой момент аннулировать переменную – «вычеркнуть» ее из сессии, или же уничтожить все данные сессии. Чтобы задать промежуточное хранилище, которое использует PHP, можно написать соответствующие функции и зарегистрировать их как обработчики сессии. Однако В PHP существуют обработчики по умолчанию, которые хранят данные в файлах.

Инициализация сессии. Прежде, чем работать с сессией, ее необходимо инициализировать. Делается это путем вызова специальной функции session_start().

· void session_start()

Функция инициализирует механизм сессий для текущего пользователя, запустившего сценарий. По ходу инициализации она выполняет ряд действий:

1. Если посетитель запускает программу впервые, у него устанавливается Cookies с уникальным идентификатором, и создается временное хранилище, ассоциированное с этим идентификатором.

2. Определяется, какое хранилище связано с текущим идентификатором пользователя.

3. Если в хранилище имеются какие-то переменные, их значения восстанавливаются (создаются глобальные переменные, которые были сохранены в сессии при предыдущем завершении сценария).

Регистрация переменных. Чтобы сохранить переменную в сессии, ее предварительно нужно зарегистрировать. Для этого предназначена функция session_register().

· bool session_register(mixed $name

[, mixed $name1,...])

Функиця принимает в параметрах одно или несколько имен переменных (имена задаются в строках, без знака $ слева), регистрирует их в текущей запущенной сессии и возвращает значение «истина», если все прошло корректно. В функцию можно передавать не одну строку в каждом параметре, а сразу список строк. Каждая такая строка будет регистрировать отдельную переменную с соответствующим именем. Элементом списка может быть список строк, и т. д. Нет ничего страшного, если дважды зарегистрировать одну и ту же переменную в сессии. Так и происходит при повторном запуске сценария.

Пример работы с сессиями:

<?

session_start();

session_register("count");

$count=@$count+1;

?>

<body>

<h2>Счетчик</h2>

В текущей сессии работы с браузером Вы открыли эту страницу <?=$count?> раз(а). Закройте браузер, чтобы обнулить счетчик.

</body>

Идентификатор сессии и имя группы. На одном и том же сайте могут сосуществовать сразу несколько сценариев, которые нуждаются в услугах поддержки сессий PHP. Они «ничего не знают» друг о друге, поэтому временные хранилища для сессий должны выбираться не только на основе идентификатора пользователя, но и на основе того, какой из сценариев запросил обслуживание сессии.

Имя группы сессий. Пусть разработчик A написал сценарий счетчика. Он использует переменную $count, и не имеет никаких проблем, до тех пор, пока разработчик B, ничего не знающий о сценарии A, не создал систему статистики, которая тоже использует сессии. Он также регистрирует переменную $count, не зная о том, что она уже «занята». В результате пользователь, запустив сначала сценарий разработчика B, а потом – A, видит, что данные счетчиков перемешались.

Нужно разграничить сессии, принадлежащие одному сценарию, от сессий, принадлежащих другому. Для этого используются группы сессий. Можно давать группам сессий непересекающиеся имена, и сценарий, знающий имя своей группы сессии, сможет получить к ней доступ. Теперь разработчики A и B могут оградить свои сценарии от проблем с пересечениями имен переменных. Достаточно в первой программе указать PHP, что мы хотим использовать группу с именем, скажем, sesA, а во второй – sesB.

· string session_name([string $newname])

Функция устанавливает или возвращает имя группы сессии, которая будет использоваться PHP для хранения зарегистрированных переменных. Если $newname не задан, то возвращается текущее имя. Если же этот параметр указан, то имя группы будет изменено на $newname, при этом функция вернет предыдущее имя.

Session_name() лишь сменяет имя текущей группы и сессии, но не создает новую сессию и временное хранилище! Нужно в большинстве случаев вызывать session_name (имя_группы) еще до ее инициализации – вызова session_start().

Если функция session_name() не была вызвана до инициализации, PHP будет использовать имя по умолчанию – PHPSESID.

Имя группы сессий, устанавливаемое рассматриваемой функцией, – это имя Cookie, который посылается в браузер клиента для его идентификации. Таким образом, пользователь может одновременно активизировать две и более сессий – с точки зрения PHP он будет выглядеть как два или более различных пользователя. Следует помнить, что, случайно установив в сценарии Cookie, имя которого совпадает с одним из имен группы сессий, Cookie «затрется». Пример:

<?

session_name("CounterScript"

session_start();

session_register("count");

$count=@$count+1;

?>

В текущей сессии Вы открыли эту страницу

<?=$count?> раз(а).

Лучше всегда указывать имя группы сессии вручную, не полагаясь на значение по умолчанию.

Идентификатор сессии. Идентификатор сессии (SID) фактически является именем временного хранилища, которое будет использовано для хранения данных сессии между запусками сценария. Итак, один SID – одно хранилище. Нет SID, нет и хранилища, и наоборот.

Как же соотносится идентификатор сессии и имя группы? Имя – это собирательное название для нескольких сессий (то есть, для многих SID), запущенных разными пользователями. Один и тот же клиент никогда не будет иметь два различных SID в пределах одного имени группы. Но его браузер вполне может работать с несколькими SID, расположенными логически в разных «пространствах имен».

Итак, все SID уникальны и однозначно определяют сессию на компьютере, выполняющем сценарий – независимо от имени сессии. Имя же задает «пространство имен», в которое будут сгруппированы сессии, запущенные разными пользователями. Один клиент может иметь сразу несколько активных пространств имен (то есть несколько имен групп сессий).

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...