Password
    
 К титульной странице  |  Форум  |  О проекте  |  Словарь  |  Товары  |  Сделать стартовой  |  В Закладки   
Авторизация
Забыли пароль?
Регистрация 
 
Программирование
Безопасность
Демосцена
Игры
WEB-мастерская
Программное обеспечение
Аппаратное обеспечение



Последние материалы
  The Chronicles of Riddick: Escape from Butcher bay

  Что такое хорошо и что такое плохо, или FAQ по LCD-мониторам

  Организация удаленного доступа

  Инсталляция программного обеспечения используя GPO

  Smarty в веб-разработке

  BioShock или кафе разбитых надежд...



Последние новости
  Латвия подписала АСТА

  Примечательная промо-акция игры STAR WARS: The Old Republic на Times Square в Нью Йорке

  На сайте выложены первые выпуски легендарной телепередачи о компьютерных играх "От винта!"

  На сайте опубликован энциклопедический словарь по информатике Э.Якубайтиса

  Конференция Разработчиков Видеоигр, 1979

  Более шустрый и динамичный Mail.lv



Charitable advertising
Њл ­г¦¤ Ґ¬бп ў ў иҐ© Ї®¬®йЁ!



Ziedot.lv

Penn State Child Life Program



Программирование --> Perl/PHP
Работа с PHP-сессиями
  
Автор: Сергей Василенко
Источник:mysitez.km.ua
Опубликовано: [2005-01-20 23:11]
Как известно, HTTP-протокол не имеет средств сохранения информации о состоянии. Короче говоря, каждый новый выполняющийся скрипт понятия не имеет, что выполнялось до него остальными. Поэтому и были придуманы такие штуки, как «сессии» или «сеансы работы пользователя». И каждому веб-программисту нелишне было бы знать, как ними пользоваться.

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

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

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

Работает это следующим образом. При вызове специальной функции, обозначающей старт сессии (называется она, как не странно session_start()) PHP-интерпретатор выполняет такие действия:

  • во первых, он проверяет, не установлена ли переменная $PHPSESSID, если нет, то:
    • генерирует случайный идентификатор сессии $PHPSESSID, который представляет из себя 32-символьную строку приблизительно такого вида: 833be10e4834f630afa7a91ec2cf2b48
    • потом создает специальный файл, в который будут сохраняться переменные, и присваивает ему имя вида «sess_» + индикатор сессии.
  • понятно, если переменная $PHPSESSID уже установлена, то интерпретатор просто открывает нужный файл и после этого все переменные, определенные ранее в сессии, будут доступны, как и обычные, простым обращением «$имя_переменной»

Следовательно, единственным нашим заданием остается передать этот самый $PHPSESSID во все скрипты, к которым можно перейти по ссылке. Но особой сложности в этом нет, поскольку это также происходит автоматически (вообще-то, не всегда, а лишь при работе PHP с включенным параметром --enable-trans-sid, но сейчас будем считать, что PHP был откомпилирован и настроен правильно). Итак, делается это двумя способами: при помощи cookie (по умолчанию) или присоединением к каждой ссылке GET-параметра и hidden-поля к каждой форме. Прежде всего, PHP пробует установить cookie, и только если ему это не удаётся, «перелопачивает» все страницы в поисках ссылок и форм (что, естественно, замедляет его работу, поэтому вывод один - не выключайте «куки» :) .

Итак, как можно работать с сессионными переменными? Тут есть несколько путей. Во-первых, можно воспользоваться специальными функциями для установки и чтения переменных из сессии. Вот некоторые из них:

  • session_start() - старт сессии
  • session_destroy() - закрытие сессии
  • session_register() - регистрирует одну или несколько переменных в сессии
  • session_unregister(string name) - убирает переменную из сессии
  • session_unset() - очистка всех переменных сессии
  • session_is_registered(string name) - проверка наличия переменной в сессии

Я думаю, особых проблем с использованием этих функций у вас возникнуть не должно. Функциям session_unregister и session_is_registered передается строка с именем необходимой переменной. Вот простой пример их использоваания:

<?php
if (!session_is_registered('count')) {
   session_register("count");
   $count = 0;
}
else {
   $count++;
}
?>

Но вообще-то, этими функциями лучше не пользоваться, так как иногда они могут работать некорректно. Есть альтернативный вариант доступа к сессионным переменным - через глобальный массив $_SESSION (или $HTTP_SESSION_VARS в версиях PHP <= 4.0.6). Поэтому, если есть возможность, пользуйтесь именно ими. Теперь вышеприведённый пример будет выглядеть вот так:

<?php
// Используйте $HTTP_SESSION_VARS 
// в PHP версии 4.0.6 или ниже

if (!isset($_SESSION['count'])) {
   $_SESSION['count'] = 0;
}
else {
   $_SESSION['count']++;
?>

Для того, чтобы убрать переменную из сессии, нужно либо воспользоватся функцией unset($_SESSION['имя_переменной']), либо специальной функцией session_unregister('имя_переменной').

Внимание: если вы пользуетесь массивами $_SESSION или $HTTP_SESSION_VARS, вы НЕ МОЖЕТЕ использовать функции session_register(), session_unregister() и session_is_registred(). Поэтому выбирайте какой-то один способ, и придерживайтесь его на всём сайте.

Вот вкратце и всё, если есть какие-то вопросы - пишите, попробуем разобраться вместе. Или прочитайте руководство, свежая версия всегда доступна с официального сайта PHP: www.php.net/docs.php.





Перейти к рубрике --> PHP

Наши друзья
Juridiskie pakalpojumi  
IT Works
  Codenet - всё для программиста
   
• Hi-tech NEWS • InCube e-mag
  Программисты, Вам сюда!
КомментарииВсего:0


Только зарегистрированные пользователи могут оставлять здесь комментарии. Зарегистрироваться можно здесь. Если вы уже зарегистировались ранее, то можете войти в систему здесь.


© Mihail Chernov (MiHack) Обмен ссылками