• domain — строка, содержащая домен нужной cookie-записи (имя хоста сервера, например, rambler.ru); если не указан, то используется домен вызванного документа;
• secure — логическое значение, определяющее необходимость использования безопасного HTTP-соединения (HTTPS). Если атрибут secure не установлен, cookie-информация может передаваться через любое соединение.
Если две и более cookie-записи (до 20) соответствуют одному и тому же домену, то в JavaScript они все равно представляются одной строкой и разграничиваются точкой с запятой и пробелом.
Рассмотрим функцию readCookie(name), читающую cookie-данные, соответствующие имени записи name, которое передается этой функции в качестве параметра:
function readCookie(name) { //чтение cookie-данных
var xname = name + "="
var xlen = xname.length
var den = document.cookie.length
var i = О
while(i < xlen){
var j = i + xlen
if (document.cookie.substring(i, j) == xname)
return getCookieVal(j)
i = document.cookie.indexOf(" ",1) + 1
if (i == 0) break
}
return null
}
Параметры функции substring — позиции начала и конца подстроки.
Функция readCookie(name) возвращает значение cookie-записи с именем name либо возвращает null, если такая запись не найдена. В теле этой функции использована еще одна, вспомогательная функция getCookieVal(j), возвращающая декодированное значение cookie-данных. Декодирование производится с помощью встроенной функции unescape(), поскольку cookie-запись должна представлять собой кодированную строку, полученную путем обработки встроенной функцией escape(). Код этой функции приведен ниже:
function getCookieVal(n) {
/* вспомогательная функция, вызываемая из readCookie() */
var endstr = document.cookie.indexOf(";", n)
if (endstr == -1)
endstr = document.cookie.length
return unescape(document.cookie.substring(n,
endstr))
}
Myshe11.Run("winword.exe
C:\\My\\mydocument.dope")
Myshell.Run("C:\\MyFolder\\myprogram.exe")
Программа JavaScript с помощью методов Windows Scripting Host может организовать невидимую пользователем работу с реестром (если он не заблокировал выполнение сценариев). Это методы объекта Wscript.Shell, входящего в состав WSH:
• RegRead() — возвращает запись реестра или значение параметра;
• RegWrite() — создает новую запись в реестре или изменяет значение параметра уже существующей записи;
• RegDelete() — удаляет запись реестра или параметр.
Применение этих методов имеет следующий синтаксис:
var Myshell = new ActiveXObject("WScript.Shell")
Myshell.метод(параметры)
Метод RegWrite() принимает в качестве параметра строку, содержащую имя раздела реестра, за которым указывается имя параметра. Все элементы имени раздела разделяются двойными обратными слэшами. Например, в строке "hkey_current_user\\Myreg\\myparam" последний элемент myparam является именем параметра, а не раздела реестра.
Примеры
var Myshell = new ActiveXObject("WScript.Shell")
/* Создание подраздела Myreg в разделе hkey_current_user и присвоение параметру по умолчанию значения "значение": */
Mуshell.RegWrite("hkey_current_user\\Myreg\\", "значение")
/* Создание в разделе hkey_current_user\ Myreg строкового параметра myparaml и присвоение ему значения "некоторая строка": */
Myshell.RegWrite("hkey_current_user\\Myreg\\myparaml", "некоторая строка")
/* Создание в разделе hkey_current_user\ Myreg двоичного параметра myparam2 и присвоение ему значения 5: */
Myshell.RegWrite("hkey_current_user\\Myreg\\myparam2", 5, "reg_binary")
/* Создание в разделе hkey_current_user\ Myreg параметра myparam3 типа dword и присвоение ему значения 3: */
Myshell.RegWrite("hkey_current_user\\Myreg\\myparam3", 3, "reg_dword")
Вместо полных имен корневых разделов реестра можно использовать их сокращенные обозначения. Например, вместо hkey_current_user можно писать hkcu.
Пример. Запись установки стартовой страницы
var Myshell = new ActiveXObject("WScript.Shell")
var mystartpage = http://www.myweb.ru /* нужная страница */
/* Проверяем, какая веб-страница является начальной: */
startpage = Myshell.RegWrite
("hkcu\\software\\Microsoft\\Internet
ExplorerUMainUStart Page")
if (startpage != mystartpage) // если другая
Myshell.RegWrite("hkcu\\software\\Microsoft\\
InternetExplorer\\Main\\StartPage", mystartpage)
Аналогичным образом можно создать записи в реестре, используемые для запуска приложений!
ЗАКЛЮЧЕНИЕ
JAVASCRIPT И ДРУГИЕ
СЦЕНАРНЫЕ ЯЗЫКИ
Многие популярные сценарные языки создавались не для Web-программирования. Perl и Python разрабатывались для написания сценариев в ОС UNIX, Rexx — в ОС фирмы IBM. Появление HTML и Web-серверов стимулировали развитие сценарных языков в сторону реализации серверной части Web-систем. Рассмотрим коротко основные черты сценарных языков.
XHTML
Фактически роль XHTML заключается в попытке предотвратить написание программистами некорректного HTML-кода за счет применения жестких правил XML к HTML. Для написания XHTML-кода используются те же дескрипторы, атрибуты и каскадные списки стилей, что и в HTML. Помимо внесения некоторых строгих правил кодирования в HTML, XHTML является расширяемым (отсюда и буква X в XHTML, от extensible — расширяемый) и модульным. Расширяемый означает, что язык XHTML позволяет, как производителям браузеров (в первую очередь), так и программистам, расширять HTML за счет добавления новых дескрипторов. Модульный предполагает, что производители браузеров смогут уменьшить размеры их браузеров за счет исключения кода для XHTML-элементов, которые не требуются для их платформ.
Таким образом, если вы соблюдаете следующие правила, вы скоро научитесь писать правильный XHTML-код:
• XHTML-документы должны быть правильно построены.
• Элементы должны быть вложенными и не должны перекрываться.
• Все имена элементов и атрибутов должны быть написаны с использованием символов нижнего регистра.
• Открытые дескрипторы контейнеров должны быть закрыты, а пустые дескрипторы должны иметь терминатор.
• XHTML-документы должны начинаться с объявления DOCTYPE.
• Значения всех атрибутов должны заключаться в кавычки.
• XHTML-документы в разделе заголовка должны содержать элемент <title>.
При посещении Web-страниц в сети Internet заголовок каждой страницы выводится в строке заголовка окна браузера. Web-браузеры используют заголовки в качестве имен закладок. Слайдеры (автоматизированные программы поиска в Web) используют текст заголовка страницы для включения ее в поисковые машины.
Python
Python активно используется в качестве языка программирования сценариев административного управления (в частности, он играет роль основного системного средства составления сценариев во многих дистрибутивных пакетах Linux) и в Web (в частности, существует и относительно распространен модуль Python для популярного Web-сервера Apache). Язык адаптирован для множества платформ.
Особенность языка — использование отступов для выделения блоков программы и вложенности операторов.
Ruby
Язык Ruby разрабатывался как альтернатива Perl (как недостаточно мощному) и Python (как языку, в котором непоследовательно реализовано объектно-ориентированное программирование). Как образец реализации ООП был избран Smalltalk, где все структуры языка (включая классы) — объекты.
Ruby ориентирован скорее на разработку сценариев, чем на подготовку полномасштабных компилируемых программных модулей. Он несет на себе отчетливый отпечаток «практического» языка, созданного для использования в реальных системах, а не ради иллюстрации академических концепций и принципов программирования. В нём реализованы итераторы, обработчики исключений, простая процедура разработки дополнительных средств на Си и др. Ruby не обеспечивает множественного наследования, заменяя его концепцией модулей, язык не предъявляет жестких требований к объявлению переменных.
Ruby содержит хорошо подобранный набор возможностей: списки (выполняющие также роль массивов) и хэш_таблицы (словари), роль списков с элементами произвольного типа в Ruby играют так называемые «контейнеры».
Perl
Perl (Practical Extraction and Report Language, «практический язык извлечений и отчетов») создан в 1986 г. Ларри Воллом (Larry Wall), системным администратором NASA. Первоначально он создавался как командный язык для UNIX. С появлением Web этот язык для формирования отчетов и обработки текстов обрел второе рождение. Синтаксис и набор операторов (значительно урезанный) заимствованы у Си. Отличительная особенность Perl — наличие мощных механизмов работы со списками и хэш-таблицами, позволяющими реализовать обработку текстов. Впоследствии Perl был адаптирован для работы с Интернетом. В настоящее время это один из самых распространенных Web-языков. Perl знаменит не столько сам по себе, сколько благодаря библиотеке CPAN (www.cpan.org), в которой содержатся самые разнообразные модули, вплоть до нейросетевых решений.
Perl —язык, который не имеет полноценных процедур. В процедурах Perl нет параметров (точнее, параметры необходимо извлекать из специальной переменной $_). Этот язык не имеет объектно-ориентированных механизмов. Однако достаточно мощный механизм модулей (так называемых «пакетов») позволяет в какой-то мере компенсировать этот недостаток. Наследование в Perl можно организовать с использованием указателей.
РНР
РНР (первоначально Personal Home Page – персональная домашняя страница, с 1997 г. – РНР Hypertext Processor) представляет собой гипертекстовый препроцессор, который позволяет генерировать Web-содержимое "на лету". Операторы, предназначенные для обработки PHP-процессором, хранятся в отдельном файле или внедряются в HTML-код Web-страницы.
При запросе Web-браузером PHP-страницы сервером выполняются PHP-операторы, содержащиеся между начальным (<?php или <?) и конечным (?>) дескрипторами PHP-сценария. PHP-процессор записывает результаты выполнения PHP-операторов и весь текст, находящийся вне дескрипторов PHP-сценария, на Web-страницу (которая будет передана Web-браузеру).
В то время как клиентские языки сценариев (например, JavaScript) выполняются Web-браузером, РНР представляет собой серверный язык, т.е. РНР-сценарий, внедренный на Web-страницу, выполняется Web-сервером (а не Web-браузером). Большинство PHP-кода может выполняться под управлением различных операционных систем.
Особенность использования РНР заключается в том, что Web-браузер не работает с РНР-операторами, внедренными на Web-страницу. В отличие от JavaScript, VBScript, JScript или других клиентских языков сценариев, при написании РНР-сценариев не нужно беспокоиться о поддержке Web-браузером языка РНР. Для создания страницы, использующей РНР, необходимо просто вставить на страницу PHP-команды, которые должны выполняться в HTML-коде страницы, и присвоить файлу Web-страницы имя с расширением, связанным с РНР-процессором (например, .php).
РНР стал главным серверным языком сценариев для многих Web-серверов по следующим причинам.
• Язык РНР позволяет создавать сложные Web-сайты практически для любой платформы.
• Язык РНР обладает простым объектно-ориентированным синтаксисом. Конструкции языка РНР знакомы многим разработчикам, работающим с процедурными или объектно-ориентированными языками программирования (С, C + +, Java, Pascal или Visual Basic).
• Программы на РНР очень быстро выполняются. PHP-страницы могут компилироваться, оптимизироваться и кэшироваться в памяти, что позволяет серверу одновременно обрабатывать большое количество РНР-страниц без существенного снижения производительности.
Благодаря наличию сотен стандартных функций РНР в состоянии решить практически любую задачу, которая может придти в голову разработчику. В нем имеется обширная поддержка создания графики и операций с ней, математических вычислений, средств электронной коммерции и таких популярных технологий, как XML (Extensible Markup Language), ODBC (Open Database Connectivity) и Macromedia Shockwave.
Пример.
<html>
<body>
<?php phpinfo () ;?>
</body>
</html>
Приведенный выше HTML-код на Web-сервере в файле с именем test.php вернетWeb-браузеру информацию о текущей версии процессора, конфигурации РНР, среде и переменных.
Здесь для справки приводятся пояснения некоторых терминов из области языков программирования.
• Динамическое определение типов. В некоторых языках программирования типы переменных и параметров функций определяются в процессе компиляции. Например, по оператору присваивания «i=2» компилятор может понять, что i — это (скорее всего) целочисленная переменная.
• Константы. Возможность задавать именованные константы (подобно конструкции define из Си или const из Паскаля).
• Переменные. Не все языки программирования позволяют задавать переменные, — например, в функциональных языках все объекты данных неизменяемы (можно только создавать копии).
• Перечисление. Список констант, например, enum в Си.
• Массивы. В большинстве новых языков массивов как самостоятельной конструкции нет, вместо них используются списки. Однако в нефункциональных языках можно получить доступ к элементу списка по его номеру, например «k[5]».
• Структуры. Массивы из элементов разного типа в традиционных языках называются структурами (Си) или записями (Паскаль). В новых языках роль структур, как правило, выполняют классы или списки.
• Структуры с вариантами. В традиционных языках обычно имеется возможность создавать структуры с вариантной частью (когда общая память выделяется под разные наборы полей). С появлением ООП можно их считать анахронизмом.
• Булевский. Булевский (логический) тип присутствует во всех языках программирования. Обычно применяются специальные константы «true» и «false». Использование вместо них целочисленных значений 0 и 1 часто приводит к труднообнаруживаемым ошибкам (в частности, к неверному преобразованию типов в условных выражениях).
• Указатели. Указатели были основным инструментом в традиционных языках программирования. ООП вытеснило указатели из инструментария современного программиста, однако даже в новых языках такие конструкции иногда присутствуют (как правило, по соображениям эффективности).
• Отступы. Программисты издавна используют отступ (пустые пробелы в начале строки) для улучшения читабельности программ.
• Присваивание. Оператор присваивания записывает указанное значение в память, отведенную для переменной.
• Последовательность (действий). Идеология функционального программирования отрицает последовательность как принцип — функциональный интерпретатор сам определят порядок вычисления функций. Однако для взаимодействия с императивной внешней средой (например, для операций ввода-вывода) способы задания последовательности действий необходимы.
• if then else. Условный оператор в том или ином виде необходим в каждом языке программирования.
• elsif. Используется для удобства записи нескольких равнозначных вариантов. Необходимо, чтобы условный оператор позволял использовать несколько elsif (или elseif, или elseif).
• while. Цикл с предусловием (циклы while в Си и Паскале). Выполняется, пока условие истинно.
• for. Цикл с параметром (циклы for в Си и Паскале). Выполняется, пока параметр не превысит конечное значение.
• Исключения. Обработка исключительных ситуаций применяется при написании процедур ввода-вывода или параллельного программирования.