Функции обслуживани сессий


Содержание

Идентификация пользователей с помощью сессий в php. Глобальная переменная $_SESSION

Развиваясь в программировании на языке PHP, Вы будете задаваться вопросами: как идентифицировать пользователя, что такое сессии, что такое куки. Сейчас я попробую это объяснить ;)

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

Глобальные переменные — это переменные, которые действуют в любой части Вашего кода.

Глобальная переменная $_SESSION отвечает за хранение данных на сервере(php сессия), и эти данные уничтожаются после закрытия пользователем окна браузера.

Сейчас Вы увидите насколько проста технология сессий $_SESSION. За запуск сессий в php отвечает функция session_start();. Эта функция запускается до вывода в браузер какой либо текстовой информации. (лучше ее ставить в самое начало вашего кода, самой первой строкой)

Это файл нашего сайта, auth.php — тут пользователь авторизуется.

А это другой файл нашего сайта, к примеру username.php. Он выводит информацию о пользователе

Как можно увидеть из кода выше, глобальная переменная $_SESSION может быть массивом, и в нее можно записывать любые данные о пользователе.

Еще раз повторюсь! Сессии в PHP, а именно значение глобальной переменной $_SESSION будет существовать только до закрытия браузера!

Вы наверное уже задались вопросом, а как распознать пользователя после закрытия браузера, когда он открыл и зашел на Ваш сайт заного? Как идентифицировать польователя, если сессия пустая? Нам помогут куки — $_COOKIE (об этом в следующем уроке, через пару дней ;))

Вписывание функции обслуживания клиентов в систему управления компанией

Вписывание функции обслуживания клиентов в систему управления компанией

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

Однако большинство отделов маркетинга и/или рекламы компаний СНГ даже не рассматривают данную концепцию: их деятельность в основном направлена на продвижение основной продукции или услуг, нежели собственно обслуживания клиентов. В этой связи начнем с рекламирования отдела обслуживания клиентов среди самих клиентов.

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

1. Показ клиенту, что функция обслуживания клиентов является „выделенной“ функцией и ей уделяется особое внимание

2. Снятие с верхнего руководства необходимости подписания писем клиентам. Это перекладывается на менеджера отдела обслуживания клиентов.

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

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

Отдельный вопрос – самостоятельная брошюра отдела обслуживания клиентов. Ее главный принцип – строгость и простота. Мы специально подчеркиваем данный аспект, ибо это не совсем стандартный рекламный материал. Главная задача данной брошюры – информировать клиента о возможностях системы обслуживания клиентов Вашей компании. Здесь нет необходимости показа броских продуктов, зданий и сооружений. Основное для клиента информативность и персонификация. Последнее может быть достигнуто не только текстом брошюры, но и групповой или персональной фотографией (фотографиями) самого персонала отдела обслуживания клиентов.

Отдел обслуживания клиентов должен поддерживать постоянный контакт со своими клиентами. Это аксиома, которая не требует доказательств. Данное направление может быть реализовано с помощью внутриотдельских информационных писем, или новостных брошюр. И тот, и другой вид письменной коммуникации может выполнять несколько функций: представлять персонал, информировать о новых политиках и процедурах, объяснять внедрение новых форм документов, методов возврата товара и т.д. Один из наших клиентов в штате Мичиган (фармацевтическая фирма) уже второй год совмещает указанную выше информацию на настенных календарях, рассылаемых ежемесячно клиентам компании. Если Вы не хотите тратиться на внутриотдельские информационные письма, полезной альтернативой является выделение самостоятельного раздела во внутрифирменной корпоративной газете. Она может использоваться для опроса клиентов по качеству обслуживания. Ниже приведен пример подобного вопросника, разработанного нашей компанией для одного из наших клиентов в Венесуэле. Вопросник был впрямую вставлен в рассылаемую клиенту корпоративную газету с маркой почтовой оплаты. Респонденту оставалось только вырезать вопросник и после ответа и забросить его в почтовый ящик.

· Знаете ли Вы как наш клиент, что мы за компания и как мы зарегистрированы в телефонных справочниках, рекламных средствах массовой информации и торговых каталогах?

· Знаете ли Вы, что все наши продукты имеют адрес, куда клиенты могут обратиться и телефон?

· Когда Вы обращаетесь в нашу компанию, попадаете ли Вы сразу в нужный отдел, или Вам приходится по несколько раз объяснять одно и тоже разным людям?

· Сколько в среднем времени Вам нужно ожидать на линии, пока в нашей компании поднимут трубку?

· Как часто Вы слышите сигнал „занято“ при звонке в нашу компанию?

· Как часто Вас ставят на ожидание на линии во время телефонного звонка? Продолжительность этого ожидания?

· Называют ли представители нашей компании свое имя во время приветствия по телефону?

· Задают ли наши работники вопросы, позволяющие определить природу Вашей проблемы?

· Отвечают ли на Ваши вопросы точно и компетентно?

· Насколько на Ваш взгляд наши работники осведомлены о продуктах и услугах компании?

· Как быстро наши работники возвращают Вам свои обещанные звонки?

· Сколько времени на Ваш взгляд требуется нашему работнику для решения Вашей проблемы?

· Как Вы оцениваете вежливость наших работников по пятибалльной шкале, где 1-грубое отношение, 5 очень вежливое отношение?

· Как Вы в целом оцениваете наше обслуживание клиентов, где 1-грубое отношение, 5 очень вежливое отношение?

Несмотря на стандартность вопросника, сама увязка его с корпоративной газетой, резко повышает вероятность обратной связи.

Вы наверно уже обратили внимание, что излагая материал, посвященный продвижению функции обслуживания клиентов, мы основное внимание уделяем твердой копии, оставляя в стороне теле и радио медиа. И это действительно так. Действительно, постоянство и настойчивость печатного слова делает более эффективным продвижение функции обслуживания клиентов именно через этот канал. Это даже более эффективное средство, чем устная коммуникация. Причин несколько:

  • Люди забывают. И они забывают устную коммуникацию с ошеломляющей скоростью. Исследования показывают, что через один день после получения вербального сообщения 28% его полного объема забывается. После одной недели 48%, после одного месяца 70%. При такой постановке вопроса, даже если Вы через день будете говорить своим клиентам о деталях Вашей системы обслуживания, они все равно не смогут воссоздать детали, а это ведет увеличению загрузки Вашего персонала.
  • Забывая, люди неверно воспринимают информацию, причем часто делают это преднамеренно, стремясь получить максимум от компании, производителя продуктов и услуг. В этом случае, представитель отдела обслуживания клиентов, попадает в сложную ситуацию: в одном случае, сталкиваясь с намеренным искажением информации, — он восстанавливает против себя клиента, следуя политике компании, но противореча ему. В другом случае, даже если представитель отдела обслуживания клиентов и убедит потребителя в его ошибке, у последнего остается неприятный осадок.

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


Развивая письменное продвижение функции обслуживания клиентов, не забывайте о восприятии чтения. Не думайте, что Ваши послания, как самостоятельные, так и в составе продукта будут читать. Поэтому печатное обращение следует повторять несколько раз, чтобы быть уверенным, что оно дошло и воспринято потребителем.

Системы управления очередью как инструмент повышения качества обслуживания клиентов

«Банковский ритейл», 2011, N 1

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

Время ожидания в очереди — значимое конкурентное преимущество

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

Важность решения этой задачи подтверждается деятельностью крупнейших участников рынка.

В частности, Сбербанком — в рамках разработанной в 2008 г. совместно с консалтинговой компанией McKinsey & Company Стратегии развития на период до 2014 г. — декларируются максимальная ориентация на клиента, намерение улучшить качество обслуживания клиентов, в том числе за счет повышения производительности труда более чем на 50%, а также автоматизации процесса обслуживания в офисах банка. Время утверждения данной Стратегии совпало с началом активного внедрения Сбербанком электронной системы управления очередью (далее — ЭСУО) в своих офисах. В этой связи также важно отметить запуск банком в октябре 2010 г. программы «Очередей.net», предполагающей сокращение времени ожидания клиентов в очереди к концу 2012 г. до 10 — 15 мин. Очевидно, что мониторинг результатов принятых программ невозможен без внедрения в офисах ЭСУО, что позволит формировать статистику по времени ожидания и обслуживания клиентов.

ВТБ24 также активно оснащает свои офисы ЭСУО. Заместитель президента — председателя правления ВТБ24 Вячеслав Воробьев в интервью порталу Banki.ru положительно оценивает результаты внедрения ЭСУО: «За последние два года мы вдвое сократили долю клиентов, вынужденных ждать в очередях более 10 минут». А также замечает: «Учитывая средний годовой доход отделения и то, что рост клиентопотока у нас в сети составляет в среднем 30% в год, мы получаем окупаемость системы менее чем за год».

Результаты исследований удовлетворенности клиентов качеством обслуживания способствовали принятию решения о внедрении ЭСУО и в Банке Москвы. Еще в 2006 г. заместитель директора маркетингового центра Банка Москвы Виктор Погодин отмечал: «На основании проведенных исследований в наиболее посещаемых отделениях недавно была введена эффективная система управления очередями, что положительно отразилось не только на скорости работы с физическими лицами, но и стало новым ярким элементом корпоративного стиля Банка Москвы, положительно влияющим на формирование его имиджа» .

Пахомов В.Ю. Создание корпоративного стиля банка в сфере розницы // Банковский ритейл. 2006. N 1.

Также опыт оснащения офисов ЭСУО имеют Росбанк, Ситибанк, НБ «ТРАСТ», ЮниКредит Банк, Райффайзенбанк, Балтийский Банк и др.

Структура и алгоритм обслуживания ЭСУО

Для оценки целесообразности и перспектив внедрения ЭСУО в офисах банка рассмотрим, что представляет собой данная система с точки зрения комплектации и алгоритма функционирования.

Электронная система управления очередью — это программно-аппаратный комплекс, состоящий из следующих компонентов:

  • терминал, на экране/клавиатуре которого размещено меню с перечнем услуг, предоставляемых клиентам в офисе банка. Выбрав необходимую услугу, клиент получает талон с индивидуальным порядковым номером в очереди;
  • общее информационное табло, в режиме реального времени отображающее распределение потока клиентов. Вновь вызываемый клиент, увидев свой номер в очереди, а напротив него — номер рабочего места сотрудника банка, проходит к соответствующему рабочему месту для обслуживания;
  • табло рабочего места. Информирует клиентов о вызываемом/обслуживаемом номере клиента в очереди и (опционально) о номере соответствующего рабочего места сотрудника банка;
  • пульты вызова, установленные на каждом рабочем месте сотрудников фронт-офиса. С помощью пульта осуществляется вызов клиентов, а также ряд других функций;
  • сервер системы. С сервером соединены все компоненты системы. Сервер используется для управления системой: запуском, изменением настроек, формированием статистики, хранением базы данных и т.д.;
  • другое телекоммуникационное оборудование;
  • программное обеспечение ЭСУО.

Алгоритм обслуживания клиентов с использованием ЭСУО тезисно можно представить следующим образом:

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

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

Так, до начала обслуживания клиентов с использованием ЭСУО осуществляются следующие действия:

  1. определение целесообразности интеграции ЭСУО в локальную сеть банка. В соответствии с выбранным вариантом определяются перечень необходимого оборудования и схема подключения элементов системы;
  2. формирование перечня операций, которые осуществляются в офисе. Меню с данным перечнем будет предлагаться клиенту для выбора на экране терминала. Детализация операций для перечня должна осуществляться исходя из двух аспектов:
  • удобство для клиентов (наименование операций в перечне должно быть максимально понятным и не допускать неоднозначного толкования);
  • степень специализации/универсализации сотрудников офиса. Так как зарегистрированные в системе клиенты распределяются среди сотрудников исходя из выбранной операции и наличия у сотрудника прав на выполнение данной операции, то необходимо обеспечить соответствие детализации пунктов меню существующей в офисе детализации функций. То есть, если функции обслуживания клиентов по потребительскому кредитованию и автокредитованию закреплены за разными сотрудниками, перечень операций не может содержать единого пункта — «Кредитование»;
  1. формирование в системе списка сотрудников офиса с указанием перечня операций, которые имеет право совершать каждый из них;
  2. определение приоритетов для операций. Например, в зависимости от стратегии банка либо необходимости в привлечении ресурсов в текущем периоде времени может быть присвоен более высокий приоритет той или иной операции. Например, операции «Автокредит» присвоен в ЭСУО приоритет «4», а «Депозит» — «2». При условии что сотрудник банка совмещает функции по кредитованию и приему депозитов, в данном случае при вызове клиента будет приглашен клиент, выбравший в меню операцию «Автокредит» (даже если он зарегистрировался в системе позже);
  3. нумерация каждого рабочего места путем присвоения уникального номера. Этот номер будет отображаться на табло рабочего места в постоянном режиме и на общем информационном табло при вызове клиента сотрудником с данного рабочего места. При отсутствии табло рабочих мест в ЭСУО необходимо оборудовать рабочие места соответствующими указателями.

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

В настоящее время ряд банков проводят тендеры и начинают оснащение ЭСУО собственных офисов. Директор ООО «Дамаск» (поставщик ЭСУО) Александр Другов считает такой процесс закономерным: «Такая активность банковских структур свидетельствует о понимании эффективности системы электронной очереди как инструмента управления качеством обслуживания, снижения издержек и повышения продаж. Можно говорить о том, что наличие системы управления очередью в операционных отделениях банков постепенно становится стандартом де-факто».

Проведение тендера на выбор поставщика предполагает реализацию следующих мероприятий:

  1. выработка критериев отбора;
  2. анализ рынка поставщиков ЭСУО;
  3. изучение опыта использования ЭСУО в других банках.

Закупка того или иного оборудования и программного обеспечения является повседневной задачей, решаемой банками в процессе своего функционирования. В связи с этим критерии выбора поставщиков, как правило, уже сформированы и могут применяться банками и при выборе поставщиков ЭСУО. В их числе:

  • репутация поставщика оборудования на рынке;
  • опыт взаимного сотрудничества по другим направлениям;
  • наличие у поставщика опыта поставок продукта другим банкам и организациям;
  • наличие индивидуального подхода к заказчику;
  • наличие и качество последующего технического сопровождения;
  • наличие сертификатов качества на продукцию, сертифицированного программного обеспечения, авторских прав на использование программного обеспечения и т.д.;
  • соответствие характеристик продукта предъявляемым банком требованиям;
  • стоимость оборудования.


Специфика проведения тендера на поставку ЭСУО заключается в необходимости выбора из достаточно большого количества поставщиков (в отличие, например, от банкоматов). При этом явных лидеров в данном сегменте рынка не наблюдается. Можно выделить ряд поставщиков, имеющих опыт реализации проектов по внедрению ЭСУО:

  • ООО «Вилдис» (система «Вызов»);
  • ЗАО «Новые банковские системы» (система Next);
  • Q-matic (система Q-matic);
  • ООО «Дамаск» (система «Дамаск»);
  • ООО «Мета Технологическая Группа» (система Akis);
  • MINOR Systemhouse Ltd. (система Q-Control);
  • ООО «Онлинет» (система Onlinet).
Илон Маск рекомендует:  Что такое код pdf_get_font

Практические рекомендации для определения комплектации ЭСУО

Подготовка проекта по внедрению ЭСУО предполагает определение комплектации системы и перечня программных задач, которые будут решаться ЭСУО.

В таблице представлен ряд практических рекомендаций для определения комплектации ЭСУО.

Рекомендации по определению комплектации ЭСУО

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

Внедрение ЭСУО целесообразно осуществлять поэтапно. Так, введение в действие ЭСУО в «пилотном» офисе, а только после этого трансляция «готового решения» на другие офисы банка позволят нивелировать риски возникновения системных ошибок, избежать дополнительных трудозатрат, возможных погрешностей в методологической базе проекта и пр.

Не менее важным при внедрении ЭСУО в офисе банка является проведение работы с персоналом офиса и его клиентами. Так, кроме проведения обучения персонала офиса непосредственно использованию нового оборудования и программного обеспечения ЭСУО, требуется досконально разъяснить сотрудникам офиса преимущества использования ЭСУО, убедить их в том, что данная система работает на них, а не против них. На практике данный этап внедрения системы является одним из самых сложных, так как работа офиса действительно существенным образом трансформируется, и это не может не сказаться на возникновении негативного влияния человеческого фактора в части сопротивления изменениям.

Очевидно, что клиенты банковского офиса, в котором устанавливается ЭСУО, также нуждаются в разъяснительной работе сотрудников банка. Так, в первые 1,5 — 2 месяца использования ЭСУО мы рекомендуем организовать работу таким образом, чтобы при входе в офис клиентов встречал сотрудник банка/администратор, который бы объяснял клиентам новый порядок обслуживания в офисе и помогал зарегистрироваться в системе.

Кроме того, на начальном этапе использования ЭСУО в офисе особенно важно тщательным образом контролировать работоспособность системы, отслеживать отклонения в исполнении запланированных задач от фактических, корректность функционирования и т.п. в целях своевременного устранения неполадок в системе.

Применяя ЭСУО как инструмент системы управления качеством обслуживания клиентов банка, на наш взгляд, важно уделить особое внимание разработке перечня статистических отчетов, ключевые показатели которых на регулярной основе будут автоматически формироваться ЭСУО.

ЭСУО позволяет разработать статистические отчеты на основе объективных показателей, так как в системе фиксируются основные этапы обслуживания клиентов (время регистрации, приглашения к соответствующему рабочему месту, окончание обслуживания и ряд других параметров, предусмотренных настройками системы), а также основные показатели работы сотрудников офиса:

  • время обслуживания клиента;
  • время ожидания клиента в очереди;
  • количество обслуженных офисом/сотрудником банка клиентов.

Система показателей для анализа работы офиса по обслуживанию клиентов

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

  1. скорость обслуживания клиентов.

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

  1. количество обслуживаемых в офисе клиентов.

Основной параметр, на основе которого принимаются решения о количественном составе подразделения банка и режиме работы офиса. Статистика, формируемая ЭСУО, позволяет выявить динамику количества обслуживаемых клиентов в течение дня (определение часов пик), в течение недели (определение дней наибольшей активности клиентов), в течение месяца (определение дней наивысшей нагрузки в связи с выплатой зарплат в крупных организациях — клиентах банка и т.д.). Полученные данные могут быть использованы для разработки следующих рекомендаций:

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

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

Одновременно с количественными показателями ЭСУО обеспечивает возможность качественной оценки работы офиса. В этих целях может быть использована следующая информация:

  • оценка работы сотрудников банка.

Ряд поставщиков ЭСУО предусматривают в комплектации системы возможность установки вблизи рабочих мест сотрудников пульта для клиента, посредством которого клиент оценивает качество работы конкретного сотрудника. Альтернативным вариантом оценки качества обслуживания может служить стенд, размещенный на выходе из офиса, с просьбой опустить талон с номером очереди в одну из двух специальных емкостей в зависимости от оценки, определенной клиентом по результатам обслуживания;

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

Таким образом, внедрение ЭСУО позволит как повысить уровень обслуживания клиентов, так и увеличить эффективность контроля качества обслуживания.

Комментарий. С.Н. Шишов, к. э. н., главный специалист-аналитик, дирекция бизнес-развития и координации, ОАО «Банк ВТБ Северо-Запад»

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


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

Функции и принципы обслуживания рабочих мест

Содержание процесса организации рабочих мест

Понятие и виды рабочих мест на предприятиях

Под рабочим местом понимается часть производственной площади с размещением на ней технологическим оборудованием и инвентарем, необходимым для эффективного выполнения рабочим или бригадой определенного производственного задания. Рабочее место является первичной ячейкой производственной структуры предприятия. Организация рабочего места представляет собой комплекс мероприятий, направленных на создание на рабочем месте всех необходимых условий для высокопроизводительного труда, на повышение его содержательности и охрану здоровья рабочего. Она включает: выбор рациональной специализации рабочего места и его оснащения оборудованием, оснасткой и инвентарем; создание комфортных условий; рациональную планировку; бесперебойное обслуживание рабочего места по всем функциям. Конкретное содержание работ по рациональной организации рабочих мест зависит от многих факторов: виды труда (умственный или физический, тяжелый или легкий, разнообразный или монотонный), условий труда (комфортные или неблагоприятные), типа производства и т.д.

Рабочие места принято классифицировать по основным факторам — признакам, определяющим конечную однородность характеристик и свойств образуемых их группы. На рисунке 19 приведена схема такой классификации.

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

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

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

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

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

Как работают сессии?

1) Допустим пользователь ввел логин и пароль, отправил на сервер, на сервере произошла проверка на наличие пользователя и соответствие логин:пасс.
2) Если все ок, то генерируем случайную строку и записываем её в куки. Эту же строку сохраняем в базу данных, в таблицу X вида логин+строка.
3) При обновлении страницы/перехода на другие, отправляем куки со строкой на сервер и ищем строку в таблице X. Если там такая строка есть, то индетифицируем пользователя, отправляя в ответ логин, соответствующий строке.

Так ли работает система сессий и достаточно ли такой реализации или я что-то упустил?
И если всё так просто, то зачем использовать сторонние модули для реализации сессий?

Положение об отделе обслуживания покупателей

Положение об отделе обслуживания покупателей

1 Общие положения

1.1 Область применения

1.1.1 Настоящий документ является основным нормативным документом, устанавливающим цели, задачи, функции, права и ответственность Отдела обслуживания покупателей, далее ООП ООО «ХХХ», регламентирующим организацию его деятельности, порядок делового взаимодействия с другими структурными подразделениями и должностными лицами ООО «ХХХ», компаний сегмента «Дистрибуция», «ООО «ХХХ»» и внешних Компаний.

1.1.2 ООП является структурным подразделением в составе Управления обеспечения операционной деятельности в составе Департамента филиалов ООО «ХХХ», выполняющим в Компании централизованную функцию управления обслуживанием клиентов Головного предприятия и клиентов филиалов.

1.1.3 В своей деятельности ООП руководствуется:

— законодательством Российской Федерации,

— Уставом ООО «ХХХ»,

— Положением о кадровой номенклатуре ООО «ХХХ» (П-HR-445.04 от 28.06.2004 г.),

— Методическими рекомендациями руководителям отделов о нормах административного управления подразделением ООО «ХХХ» (М-99 от 08.05. 2003 г.)

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

— Внутрифирменными нормативными документами, регламентирующими процессы обслуживания клиентов:

1. Положение о процессе «Исполнение заказов клиентов АОМ, АОП, ОГП» (П-447 от 08.07.04);

2. Положение о возвратах (проект);

3. Процедура «Комплектация и отгрузка заказов в ГП (аптеки/доставка/ранняя)» (ПЦ-71 от 28.04.04);

4. Процедура «Исполнение заказа клиента («клиент-лично», «клиент-доставка»)» (ПЦ-26 от 29.10.03);

5. Процедура «Обработка претензий клиентов по количественной поставе товара в филиале ООО «ХХХ»» (ПЦ-44 от 09.12.03);

6. Процедура «Прием возврата товара от клиентов филиала ООО «ХХХ»» (ПЦ-42.04 от 02.07.04);

7. Процедура «Отработка претензий клиентов филиалов ООО «ХХХ» по товарно-сопроводительной документации» (ПЦ-81.04 от 20.06.04);

8. Процедура «Отработка количественных претензий «недовложения» от клиентов АОМ, АОП, ОГП» (ПЦ-88.04 от 12.08.04);

9. Процедура «Обработка рекламаций по «излишкам» от аптек и медицинский учреждений регионов Москвы и Московской области» (ПЦ-95.04 от 22.09.04);

10. Процедура «Регистрация обращений и обработка претензий клиента по возврату медицинской техники» (ПЦ-80.04 от 03.06.04);

11. Процедура «Доставка перераспределяемого товара от ООО YYY» (ПЦ-70 от 26.04.04);

12. Стандарт «Минимальный комплект товарно-сопроводительных документов для клиентов ООО «ХХХ» Москвы и Московской области» (СП-51.04 от 27.09.04);

1.1.4 Настоящее Положение является документом прямого действия и обязательно для исполнения со дня его утверждения.


1.1.5 Изменения в Положении утверждаются Генеральным Директором ООО «ХХХ» и заносятся в Лист изменений, являющийся неотъемлемой частью данного документа (Приложение А).

1.2 Нормативные ссылки

В настоящем Положении использованы нормативные ссылки на следующие документы:

1. Положение о стратегическом планировании ООО «ХХХ» (П-230 от 30.05.00)

2. Положение о планировании деятельности отделов (П-283 от 05.06.01).

3. Положение об отчетах в ООО «ХХХ» (П-250 от 08.09.00).

4. Принципы управления сегментом «Дистрибуция» (проект).

1.3 Термины, определения и сокращения

В настоящем Положении использованы следующие термины, определения и сокращения:

ООП – отдел обслуживания покупателей;

УООД – управление обеспечения операционной деятельности;

АОМ – аптечный отдел Москва;

АОП – аптечный отдел Подмосковье;

ОГП – отдел госпитальных продаж;

ПЭО – планово – экономический отдел;

ФД – финансовый департамент;

ДПр. – департамент продаж;

ДМ – департамент маркетинга;

ДПер. – департамент персонала;

ДИ – департамент инфраструктуры;

ДИТ – департамент информационных технологий;

ДЛ – департамент логистики;

ТСД – товаро-сопроводительная документация.

2 Создание и ликвидация

2.1 ООП создается и ликвидируется на основании приказа Генерального Директора ООО «ХХХ», согласованного с Президентом «ООО «ХХХ»».

2.2 Организационная структура ООП согласовывается с Директором по продажам, Первым Заместителем Генерального Директора, Директором по персоналу и утверждается приказом Генерального Директора ООО «ХХХ». Предложения вносятся Начальником ООП и Начальником УООД.

2.3 Штатное расписание ООП согласовывается с Директором по продажам, Директором по персоналу ООО «ХХХ» и утверждается приказом Генерального Директора ООО «ХХХ». Предложения вносятся Начальником ООП и Начальником УООД.

2.4 Количество и наименование групп, входящих в состав ООП, численность работающих в них сотрудников может меняться в зависимости от роста Компании, изменения специфики ее деятельности. Изменения структуры и штатной численности ООП согласовываются с Директором по продажам, Первым Заместителем Генерального Директора, Директором по персоналу и утверждаются приказом Генерального Директора ООО «ХХХ». Предложения вносятся Начальником ООП.

3 Организационная структура (Приложение Б)

3.1 Организационная структура ООП построена по линейному принципу.

3.2 В состав ООП входят следующие группы:

— Группа обслуживания клиентов г. Москвы и Московской области (ГОКМО);

— Группа обслуживания региональных клиентов (ГОРК);

— Технолого-аналитическая группа (ТАГ);

— Группа курьерской доставки (ГКД).

3.3 Деятельность структурных подразделений в составе ООП регламентируется настоящим Положением.

3.4 Руководит ООП Начальник ООП, деятельность которого регламентируется Должностной инструкцией Начальника ООП.

3.5 В непосредственном подчинении у Начальника ООП находятся:

— руководитель группы обслуживания клиентов г. Москвы и Московской области;

— руководитель группы обслуживания региональных клиентов;


— руководитель технолого-аналитической группы;

— руководитель группы курьерской доставки.

3.6 Порядок назначения на должность и освобождения от должности, распределение обязанностей внутри ООП определяется должностными инструкциями сотрудников подразделения, утверждаемыми Директором по персоналу.

4 Цель и задачи

4.1 Главная цель ООП – повышение уровня удовлетворенности клиентов ООО «ХХХ», постоянное улучшение качества обслуживания клиентов, расширение и углубление уровня предоставляемого клиентам сервиса.

4.2 Задачами ООП являются:

4.2.1 Оперативные задачи обслуживания клиентов в рамках основного бизнес-процесса: исполнение заказов и послепродажное обслуживание.

4.2.2 Аналитические задачи по оценке предоставляемого клиентам уровня сервиса, разработке стандартов обслуживания клиентов.

4.2.3 Задачи по совершенствованию обслуживания клиентов (задачи развития).

5 Функции (Приложение В)

5.1. Отдел обслуживания покупателей выполняет следующие Функции:

5.1.1 В рамках оперативных задач:

5.1.1.1 Обеспечение единой точки контакта ООО «ХХХ» с клиентами;

5.1.1.2 Управление обслуживанием клиентов АОМ, АОП, ОГП;

5.1.1.3 Управление обслуживанием региональных клиентов и клиентов филиалов;

5.1.1.4 Координация служб и отделов компании, отвечающих за обслуживание клиентов;

5.1.1.5 Централизация сбора и обработки информации о качестве обслуживания клиентов; 5.1.1.6 Обратная связь с клиентами.

5.1.2 В рамках аналитических задач:

5.1.2.1 Формирование Политики обслуживания клиентов ООО «ХХХ» на основе стратегии развития компании;

5.1.2.2 Идентификация, создание профилей, сегментация клиентов с точки зрения уровня предоставляемого сервиса;

5.1.2.3 Разработка базового уровня сервиса;

5.1.2.4 Разработка услуг с добавленной стоимостью;

5.1.2.5Разработка и постоянная актуализация нормативов и стандартов обслуживания клиентов;

5.1.2.6 Оценка уровня и качества предоставляемого клиентам сервиса.

5.1.3 В рамках задач по совершенствованию обслуживания клиентов (задачи развития):

5.1.3.1 Мониторинг изменения законодательной базы и проведение связанных с этим преобразований;

5.1.3.2 Инициирование и организация проведения оптимизации и реорганизации бизнес-процессов обслуживания клиентов;

5.1.3.3 Внутрифирменная регламентация бизнес-процессов обслуживания клиентов;

5.1.3.4 Разработка договоров и дополнительных соглашений по обслуживанию клиентов;

5.1.3.5 Разработка рекомендаций по организации обучения сотрудников компании качественному обслуживанию клиентов.

6.1 Взаимодействие со структурными подразделениями ООО «ХХХ»

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

6.1.2 Взаимодействие с ФД по вопросам мотивации сотрудников ООП;

6.1.3 Взаимодействие с ДПр. по вопросам исполнения заказов клиентов, и изучения потребностей клиентов;

6.1.4 Взаимодействие с ДМ по вопросам выработки политики обслуживания клиентов и стандартов обслуживания клиентов;

6.1.5 Взаимодействие с ДПер. по вопросам подбора, обучения и мотивации сотрудников ООП;

6.1.6 Взаимодействие с ДИТ по вопросам реализации инициированных ООП РПО

6.1.7 Взаимодействие с ДИ по вопросам обеспечения ООП материалами (ст. «Прочие материалы»), необходимыми для деятельности отдела

6.1.8 Взаимодействие с ДЛ по вопросам исполнения заказа, послепродажного обслуживания.

6.2 Взаимодействие с компаниями сегмента «Дистрибуция»


6.2.1 Взаимодействие основано на принципах управления сегментом «Дистрибуция», закрепленных в следующих документах:

6.2.1.1 Принципы организационного управления сегментом «Дистрибуция» (проект).;

6.2.2 Взаимодействие с компаниями сегмента «Дистрибуция» и прочими ДЗО «ООО «ХХХ»» в рамках информационного обмена в целях эффективного обеспечения деятельности Начальника ООП в рамках совместных проектов (в пределах своих функций).

6.3 Взаимодействие со структурными подразделениями «ООО «ХХХ»»

6.3.1 Взаимодействие основано на принципах, закрепленных в следующих документах:

6.3.1.1 «Исходные принципы информационного взаимодействия «ООО «ХХХ»» и ООО «ХХХ» от 29.10.2003г. № ПРН-01/01;

6.3.2 Договор о взаимодействии ООО «ХХХ» с ЧОП «РУСБ»

6.3.2.1 По вопросам перевозки материальных ценностей.

6.4 Взаимодействие с внешними компаниями

6.4.1 Взаимодействие основано на принципах, закрепленных в следующих документах:

6.4.1.1 «Концепция работы ООО «ХХХ» с внешним окружением в регионах» от 27.08.2001 № К-5;

6.4.1.2 «Порядок информационного обмена с контрагентами» от 24.07.2002 № ПР-502;

6.4.1.3 «Порядок участия сотрудников фирмы во внешних проверках» от 17.04.2003 № ПР-606;

6.4.1.4 «Порядок работы с личными обращениями сотрудников ООО «ХХХ» и внешних контрагентов» от 31.12.2003 № ПР-636.

6.4.2 Договор о взаимодействии ООО «ХХХ» с ЧОП «РУСБ»

6.4.2.1 По вопросам перевозки материальных ценностей.

7 Планирование деятельности Подразделения

7.1 Планирование ДЕятельности ООП осуществляется на основании «Положения о стратегическом планировании ООО «ХХХ» (П-230 от 30.05.00), «Положения о планировании деятельности отделов» (П-283 от 05.06.01), Политики обслуживания клиентов, Плана мероприятий по достижению Стратегических целей компании на год, ежемесячных оперативных планов и бюджетов, Приказов и Распоряжений Генерального Директора ООО «ХХХ».

7.2 Стратегические цели ООП на год устанавливаются Начальником ООП, согласовываются Первым Заместителем Генерального Директора и утверждаются Генеральным Директором ООО «ХХХ».

8 Отчетность по работе Подразделения

8.1 Отчетность ведется в соответствии с «Положением об отчетах в ООО «ХХХ» (П-250 от 08.09.00).

Илон Маск рекомендует:  Что такое код ncurses_init_pair

8.2 По итогам исполнения Стратегического плана за год Начальник ООП представляет Первому Заместителю Генерального Директора и Генеральному Директору ООО «ХХХ» Годовой отчет о деятельности ООП о достижении стратегических целей.

8.3 По результатам выполнения оперативного (ежемесячного) плана работы ООП Начальник ООП предоставляет отчет начальнику УООД.

8.4 Отчетные и аналитические материалы ООП могут предоставляться другим подразделениям и сотрудникам Компании по согласованию с Начальником УООД или с Директором по продажам.

9 Ключевые показатели деятельности

В качестве ключевых показателей деятельности ООП, на основе которых оцениваются результаты его деятельности, принимаются:

9.1 Доля совершенных заказов, %;

9.2 Норма насыщения спроса:

9.2.1 В стоимостном выражении, $, %;

9.2.2 В количественном выражении, позиции %;

9.3 Доля заказов с недовложениями,%;

9.4 Доля заказов с возвратами по вине ХХХ;

9.5 Доля заказов с возвратами не по вине ХХХ;

9.6 Доля заказов, не довезенных клиентам в срок:

9.6.1 В стоимостном выражении, $, %;

9.6.2 В количественном выражении, заказы %;

9.7 Средневзвешенное отклонение от стандарта времени отработки рекламаций, дни:

9.8 Доля заказов, по которым произошел срыв регламента выезда водителей:

9.8.1 В стоимостном выражении, $ %;

9.8.2 В количественном выражении, заказы %.


9.2 Абсолютные и относительные нормативные значения ключевых показателей деятельности планируются для ООП в рамках стратегического планирования на год вперед и фиксируются в стратегических планах Компании. Фиксация фактических значений показателей происходит в рамках отчетов об исполнении стратегических планов.

9.3 Методика расчета показателей деятельности ООП регламентируется Инструкцией «Разработка и получение данных по финансово-экономическим показателям, отражающим качество обслуживания покупателей» (SL-285).

ООП наделяется всеми правами и полномочиями, необходимыми для выполнения своих функций. Права и полномочия ООП осуществляет Начальник ООП:

10.1 Вносит на рассмотрение Директора по продажам предложения по совершенствованию деятельности Компании и ее структурных подразделений в области обслуживания клиентов.

10.2 Участвует в подготовке перспективных планов развития Компании, составлении бюджета.

10.3 Знакомится с проектами решений руководства Компании, касающимися деятельности ООП, а также оценкой эффективности работы ООП.

10.4 Получает от руководства ООО «ХХХ» информацию, касающуюся деятельности ООП, необходимую для качественного и оперативного выполнения функций.

10.5 Осуществляет расходование денежных средств Компании в рамках бюджета ООП ООО «ХХХ» по закрепленным статьям: Затраты на собственный автотранспорт; Прочие выплаты сотрудникам; Представительские расходы; Командировочные расходы; Расходы на обучение.

10.6 Привлекает к работе в пределах утвержденного бюджета консультантов, физических и юридических лиц, с заключением соответствующих договоров.

10.7 Направляет в структурные подразделения ООО «ХХХ» методические рекомендации, дает указания и экспертные советы в вопросах, отнесенных к компетенции ООП.

10.8 Дает заключения, в рамках своей компетенции, по проектам нормативных документов, предоставляемых на согласование и направляет в структурные подразделения ООО «ХХХ» для доработки документы по обслуживанию клиентов компании, подготовленные с нарушением существующих требований.

10.11 Запрашивает и получает из структурных подразделений ООО «ХХХ» необходимую информацию в пределах, необходимых для решения задач ООП.

10.12 Контролирует качество обслуживания клиентов ООО «ХХХ», объем и уровень предоставляемого клиентам сервиса.

10.13 Вносит на рассмотрение Директора по продажам вопрос о премировании отличившихся сотрудников и применении в установленном порядке предусмотренных законом и внутренними нормативными документами дисциплинарных мер к сотрудникам, виновным в нарушениях законодательства, Правил внутреннего распорядка и других нормативных документов Компании.

10.14 Визирует все документы, связанные с деятельностью Компании по вопросам обслуживания клиентов.

10.15 Запрашивает и получает все необходимые для работы товарно-материальные ресурсы.

10.16 Инициирует регламентацию и оптимизацию бизнес-процессов деятельности Компании, направленную на повышение качества обслуживания клиентов ООО «ХХХ».

11.1 Начальник ООП несет ответственность перед Генеральным Директором ЗАО Фирмы «ООО «ХХХ»» за достижение поставленных целей и выполнение Плана стратегического развития в части обслуживания клиентов в соответствии с Трудовым Кодексом и законодательством РФ.

11.2 Начальник ООП несет ответственность за риски, возникающие в сфере компетенции ООП.

Авторизация доступа с помощью сессий

Работа с сессиями

Создание сессии

Первое, что нужно сделать для работы с сессиями (если они уже настроены администратором сервера), это запустить механизм сессий . Если в настройках сервера переменная session.auto_start установлена в значение «0» (если session.auto_start =1 , то сессии запускаются автоматически), то любой скрипт, в котором нужно использовать данные сессии , должен начинаться с команды

Получив такую команду, сервер создает новую сессию или восстанавливает текущую, основываясь на идентификаторе сессии , переданном по запросу. Как это делается? Интерпретатор PHP ищет переменную, в которой хранится идентификатор сессии (по умолчанию это PHPSESS >cookies , потом в переменных, переданных с помощью POST- и GET-запросов. Если идентификатор найден, то пользователь считается идентифицированным, производится замена всех URL и выставление cookies . В противном случае пользователь считается новым, для него генерируется новый уникальный идентификатор, затем производится замена URL и выставление cookies .

Команду session_start() нужно вызывать во всех скриптах, в которых предстоит использовать переменные сессии , причем до вывода каких-либо данных в браузер. Это связано с тем, что cookies выставляются только до вывода информации на экран.

Получить идентификатор текущей сессии можно с помощью функции session_id() .

Для наглядности сессии можно задать имя с помощью функции session_name ([имя_сессии]) . Делать это нужно еще до инициализации сессии . Получить имя текущей сессии можно с помощью этой же функции, вызванной без параметров: session_name();

Пример 12.2. Создание сессии

Переименуем наш файл index.html, чтобы обрабатывались php-скрипты , например в Index.php, создадим сессию и посмотрим, какой она получит идентификатор и имя.

Если проделать то же самое с файлом authorize.php, то значения выводимых переменных ( >сессии и ее имя) будут такими же, если перейти на него с index.php и не закрывать перед этим окно браузера (тогда идентификатор сессии изменится).

Регистрация переменных сессии

Однако от самих идентификатора и имени сессии нам пользы для решения наших задач немного. Мы же хотим передавать и сохранять в течение сессии наши собственные переменные (например, логин и пароль). Для того чтобы этого добиться, нужно просто зарегистрировать свои переменные:

Заметим, что регистрируются не значения, а имена переменных. Зарегистрировать переменную достаточно один раз на любой странице, где используются сессии . Имена переменных передаются функции session_register() без знака $ . Все зарегистрированные таким образом переменные становятся глобальными (т.е. доступными с любой страницы) в течение данной сессии работы с сайтом.

Зарегистрировать переменную также можно, просто записав ее значение в ассоциативный массив $_SESSION , т.е. написав

В этом массиве хранятся все зарегистрированные (т.е. глобальные) переменные сессии .

Доступ к таким переменным осуществляется с помощью массива $_SESSION[‘имя_переменной’] (или $HTTP_SESSION_VARS[‘имя_переменной’] для версии PHP 4.0.6 и более ранних). Если же в настройках php включена опция register_globals , то к сессионным переменным можно обращаться еще и как к обычным переменным, например так: $имя_переменной.

Если register_globals =off (отключены), то пользоваться session_register() для регистрации переменных, переданных методами POST или GET, нельзя, т.е. это просто не работает. И вообще, не рекомендуется одновременно использовать оба метода регистрации переменных , $_SESSION и session_register() . (Начиная с версии PHP 5.3.0 не рекомендуется для регистрации переменных сессии использовать функцию session_register() ; более того, начиная с версии PHP 6.0.0, эта функция станет недоступна. Вместо этого, для регистрации переменных сессии рекомендуется пользоваться массивом $_SESSION .)

Пример 12.3. Регистрация переменных

Зарегистрируем логин и пароль, вводимые пользователем на странице авторизации.

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


То мы получим в браузере на секретной странице следующее:

В итоге получим список переменных , зарегистрированных на authorize.php и, собственно, саму секретную страничку.

Что это нам дает? Допустим, хакер хочет прочитать секреты Васи и Пети. И он как-то узнал, как называется секретная страничка (или странички). Тогда он может попытаться просто ввести ее адрес в строке браузера, минуя страницу авторизации (ввода пароля). Чтобы избежать такого проникновения в наши тайны, нужно дописать всего пару строк в код секретных страничек:

HTTP сессия. Session. Состояние сеанса. Работа с сессиями в ASP.NET MVC

Давайте рассмотрим такое понятие как сессия (HTTP-сессия, Session). Или по-другому, сеанс пользователя. Почему важно понимать механизм работы сессий. И посмотрим, как можно работать с состояниями сеансов на платформе ASP.NET.

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

Одной из основных особенностей протокола HTTP является то, что он не обязывает сервер сохранять информацию о клиенте между запросами, то есть идентифицировать клиента. Это так называемый stateless-протокол. Связь между клиентом и сервером заканчивается как только завершается обработка текущего запроса. Каждый новый запрос к серверу подразумевается как абсолютно уникальный и независимый, даже если он был отправлен повторно от одного и того же источника.

Что, если оставить stateless-природу протокола HTTP и не идентифицировать пользователя? Без состояний сеанса можно легко обойтись, если на вашем сайте представлена статичная (обезличенная) информация, например, новостная статья, состоящая из текста и изображений. В таком контексте совершенно необязательно ассоциировать несколько запросов с одним пользователем. Ведь содержание статьи никак не изменится, будь то десять запросов с одного устройства, либо десять запросов от разных людей с разных устройств.

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

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

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

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

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

  1. скрытые поля на HTML-форме (hidden form fields)
  2. куки (cookies)
  3. сессия (session, session State)

Попробуем их реализовать, используя платформу ASP.NET. Давайте кратко рассмотрим первые два механизма, и особое внимание уделим третьему, как более надежному, удобному и безопасному.

Скрытые поля на HTML-форме (hidden form fields)

Суть данного подхода состоит в том, что мы обеспечиваем навигацию по сайту при помощи стандартных html-форм. И при каждом следующем запросе мы сохраняем данные из предыдущего в скрытых полях на форме. Например:

В данном примере мы на первой html-форме получаем имя пользователя. Далее в контроллере в методе Forms2() мы извлекаем это значение из коллекции Form и передаем в представление посредством объекта ViewBag. В этом представлении генерируется код новой формы и в скрытом поле сохраняется имя пользователя. Таким образом, значение имени пользователя будет передано уже на третью формы вместе с дополнительной информацией — значением поля с именем «foodName». И так далее.

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

  • Во-первых, этот вариант не будет работать, если html-формы на наших страницах статичны, то есть жестко закодированы. И чтобы это исправить, чтобы повлиять на html-разметку мы прибегаем к помощи какой-нибудь серверной технологии (в данном случае механизм ViewBag);
  • Это безопасность. Хоть вводимые нами данные не передаются через url-параметры в адресной строке и визуально не видны на странице, мы с легкостью можем их получить или подменить или удалить или украсть просто изучив исходный код страницы или структуру запроса;

Куки (cookies)

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

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

Серверный механизм управления сессией (Session, SessionState)

Разберем, как работает механизм сессии со стороны сервера и со стороны клиента.

При стандартных настройках работы состояния сеанса для отслеживания серии запросов от одного клиента используется т.н. сессионная куки (session cookie). Алгоритм следующий:

  1. Абсолютно для каждого нового запроса на сервер (неважно, разные это клиенты или один) ASP.NET генерирует уникальный идентификатор сессии.
    Идентификатор сессии представляет собой случайно сгенерированное число, закодированное с помощью специального алгоритма в строку длиной 24 символа. Строка состоит из литералов от A до Z в нижнем регистре, а также чисел от 0 до 5. Пример идентификатора — hjnyuijl1pam3vox2h5i41in
  2. Если в течение текущего запроса данные клиента НЕ сохраняются для дальнейшей работы с ним, то и время жизни сессии этого клиента заканчивается (фактически не начавшись). При этом ранее сгенерированный идентификатор сессии становится недействительным (так как не был использован). В ответ на такой запрос клиент не получает ничего, чтобы связало его с новой сессией.
  3. Если же данные клиента (например, имя, адрес доставки товара) сохраняются на сервере, ASP.NET связывает сохраненные данные с ранее сгенерированным идентификатором сессии. Далее создается специальная сессионная куки, и в нее записывается также этот идентификатор. Эта куки добавляется в ответ на запрос и сохраняется в браузере клиента. Таким образом, создается связь клиента и его персонализированной информации на сервере. Новая сессия для данного клиента создана.
  4. При каждом следующем запросе клиент передает на сервер персональный идентификатор сессии через куки. Сервер сопоставляет идентификаторы и «узнает» клиента в рамках текущей сессии.
  5. До тех пор пока клиент передает свой персональный ключ, сессия считается активной. Сессия может закончиться по разным причинам, например, вручную на стороне сервера или по истечении какого-то установленного времени (таймаут).

От теории перейдем к практике. Давайте запрограммируем данный алгоритм и посмотрим, как он выполняется. Для этого используем специальный класс HttpSessionState . При работе в контроллере можно воспользоваться свойством HttpContext.Session . Работать с сессией очень просто, как с любой NameValueCollection :

В этом участке кода мы записываем в состояние сеанса имя пользователя. Это имя мы забираем с html-формы, которую он нам отправил. Дополнительно через свойства мы узнаем, создана ли эта сессия только что, то есть в рамках текущего запроса (если да, то и значение свойства IsNewSession будет равняться true), и уникальный идентификатор сессии. Этот идентификатор после обработки запроса будет автоматически записан в сессионную куки (если еще нет) и отправлен в ответе клиенту.

В браузере клиента можно наблюдать соответствующую куки и идентификатор его сессии:

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

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

Давайте посмотрим на наиболее интересные свойства и методы класса HttpSessionState , которые чаще всего используются в работе:

Item[index] – возвращает элемент данных по его индексу
Item[key] – возвращает элемент данных по его ключу
Remove(index) – удаляет элемент данных по его индексу
Remove(key) – удаляет элемент данных по его ключу
Clear() – удаляет все данные
Count – возвращает общее количество элементов данных для текущей сессии
Abandon() – принудительно завершить сессию
SessionID — возвращает идентификатор текущей сессии
IsNewSession – возвращает true если сессия была создана в рамках текущего запроса
Timeout – возвращает число минут, допустимое между запросами, перед тем как сессия завершится по причине таймаута (по умолчанию, 20 минут)

Изменить настройки для сессии можно либо программно в коде посредством членов класса HttpSessionState , либо через конфигурацию приложения (файл web.config). Например:

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

Сессии. Подробное описание работы и объяснение механизма.

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


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

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

Как устроены, и как работают сессии?
Для начала надо как-то идентифицировать браузер. Для этого надо выдать ему уникальный идентификатор и попросить передавать его с каждым запросом. Стыдно признаться, но когда я впервые узнал о сессиях, я думал, что это какой-то особый механизм, некий новый способ общения браузера с сервером — «сессии». Что идентификатор сессии передается каким-то особым образом. Разочарование было жестоким.
Сессии используют стандартные, хорошо известные способы передачи данных. Собственно, других-то просто и нет.
Идентификатор — это обычная переменная. По умолчанию ее имя — PHPSESSID.
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Из уже упоминавшегося раздела FAQ ясно, что переменную можно передать только двумя способами: в куках или POST/GET запросом.
PHP использует оба варианта.
За это отвечают две настройки в php.ini:
session.use_cookies — если равно 1, то PHP передает идентификатор в куках, если 0 — то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 — то нет.
Менять эти и другие параметры сессий можно так же, как и другие настройки PHP — в файле php.ini, а так же с помощью команды ini_set() или в файлах настройки веб-сервера

Если включена только первая, то при старте сессии (при каждом вызове session_start () ) клиенту устанавливается кука. Браузер исправно при каждом следующем запросе эту куку возвращает и PHP имеет идентификатор сессии. Проблемы начинаются, если браузер куки не возвращает. В этом случае, не получая куки с идентификатором, PHP будет все время стартовать новую сессию, и механизм работать не будет.

Если включена только вторая, то кука не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
Index превращается в
Index
а к формам добавляется скрытое поле

И браузер при клике на любую ссылку, или при нажатии на кнопку в форме, пошлет в запросе нужную нам переменную — идентификатор сессии!
По очевидным причинам идентификатор добавляется только к относительным ссылкам.

Теоретически, в наших с вами самодельных сессиях на куках и базе, можно самому, руками приписать ко всем ссылками передачу ид — и тогда наши собственные сессии будут работать независимо от кук. Но, согласитесь — приятнее, когда эту работу делает кто-то другой? ;-)

По умолчанию в последних версиях PHP включены обе опции. Как PHP поступает в этом случае? Кука выставляется всегда. А ссылки автодополняются только если РНР не обнаружил куку с идентификатором сессии. Когда пользователь в првый раз за этот сеанс заходит на сайт, ему ставится кука, и дополняются ссылки. При следующем запросе, если куки поддерживаются, PHP видит куку и перестает дополнять ссылки. Если куки не работают, то PHP продолжает исправно добавлять ид к ссылкам, и сессия не теряется.
Пользователи, у которых работают куки, увидят длинную ссылку с ид только один раз.

Фух. С передачей идентификатора закончили.
Теперь осталось привязать к нему файл с данными на стороне сервера.
PHP это сделает за нас. Достаточно просто написать
session_start ();
$_SESSION [ ‘test’ ]= ‘Hello world!’ ;
И PHP запишет в файл, связанный с этой сессией, переменную test.
Здесь очень важное замечание.
Массив $_SESSION — особенный.
В нем, собственно, и находятся переменные, которые мы ходим сделать доступными в различных скриптах.
Чтобы поместить переменную в сессию, достаточно присвоить ее элементу массива $_SESSION.
Чтобы получить ее значение — достаточно обратиться к тому же элементу. Пример будет чуть ниже.

Cборкой мусора — удалением устаревших файлов PHP тоже занимается сам. Как и кодированием данных и кучей всяких других нужных вещей. В результате этой заботы работа с сессиями оказывается очень простой.
Вот мы, собственно, и подошли к примеру работы сессий.
Пример очень маленький:
();
if (!isset( $_SESSION [ ‘counter’ ])) $_SESSION [ ‘counter’ ]= 0 ;
echo «Вы обновили эту страницу » . $_SESSION [ ‘counter’ ]++. » раз. » ;
echo «
. $_SERVER [ ‘PHP_SELF’ ]. «>обновить» ;
?>
Мы проверяем, есть ли у нас в сессии переменная counter, если нет, то создаем ее со значением 0, а дальше выводим ее значение и увеличиваем на единицу. Увеличенное значение запишется в сессию, и при следующем вызове скрипта переменная будет иметь значение 1, и так далее.
Все очень просто.

Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать ТОЛЬКО ОДНУ(!) строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:
session_start ();
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start ();
if ( $_SESSION [ ‘authorized’ ]<> 1 ) <
header ( «Location: /auth.php» );
exit;
>

Удаление переменных из сессии.
Если у вас register_globals=off , то достаточно написать
unset( $_SESSION [ ‘var’ ]);
Если же нет, то тогда рядом с ней надо написать
session_unregister ( ‘var’ );

Область применения.
Очень важно понимать, для чего сессии стоит использовать, а для чего — нет.

Во-первых, помните, что сессии можно применять только тогда, когда они нужны самому пользователю, а не для того, чтобы чинить ему препятствия. Ведь он в любой момент может избавиться от идентификатора!
Скажем, при проверке на то, что заполняет форму человек, а не скрипт, пользователь сам заинтересован в том, чтобы сессия работала — иначе он не сможет отправить форму! А вот для ограничения количества запросов к скрипту сессия уже не годится — злонамеренный скрипт просто не будет возвращать идентификатор.

Во-вторых. Важно четко себе представлять тот факт, что сессия — это сеанс работы с сайтом, так как его понимает человек. Пришел, поработал, закрыл браузер — сессия завершилась. Как сеанс в кино. Хочешь посмотреть еще один – покупай новый билет. Стартуй новый сеанс. Этому есть и техническое объяснение. Гарантированно механизм сессий работает только именно до закрытия браузера. Ведь у клиента могут не работать куки, а в этом случае, естественно, все дополненные идентификатором ссылки пропадут с его закрытием.
Правда, сессия может пропасть и без закрытия браузера. В силу ограничений, рассмотренных в самом главном разделе этого FAQ, механизм сессий не может определить тот момент, когда пользователь закрыл браузер. Для этого используется таймаут – заранее определенное время, по истечении которого мы считаем, что пользователь ушел с сайта. По умолчанию этот параметр равен 24 минутам.
Если вы хотите сохранять пользовательскую информацию на более длительный срок, то используйте куки и, если надо — базу данных на сервере. В частности, именно так работают все популярные системы авторизации:
— по факту идентификации пользователя стартует сессия и признак авторизованности передается в ней.
— Если надо «запомнить» пользователя, то ему ставится кука, его идентифицирующая.
— При следующем заходе пользователя на сайт, для того, чтобы авторизоваться, он должен либо ввести пароль, либо система сама его опознает по поставленной ранее куке, и стартует сессию. Новую сессию, а не продолжая старую.

В-третьих, не стоит стартовать сессии без разбору, каждому входящему на сайт. Это создаст совершенно лишнюю нагрузку. Не используйте сессии по пустякам – к примеру, в счетчиках. То, что спайлог называет сессиями, считается, конечно же, на основе статистики заходов, а не с помощью механизма сессий, аналогичного пхп-шному.
К тому же, возьмем поисковик, который индексирует ваш сайт. Если поисковый робот не поддерживает куки, то пхп по умолчанию будет поставлять к ссылкам PHPSESSID, что — согласистесь — может не сильно понравится поисковику, который, по слухам, и так-то динамические ссылки не жалует, а тут вообще при каждом заходе — новый адрес!
Если сессии используются для ограничения доступа к закрытому разделу сайта, то все просто поисковик и не должен его индексировать.
Если же приходится показывать одну и ту же страницу как авторизованным, так и не авторизованным пользователям, то тут поможет такой трюк – стартовать сессию только тем, кто ввел пароль, или тем, у кого уже стартовала сессия.
Для этого в начало каждой страницы вместо просто session_start () пишем
if (isset( $_REQUEST [ session_name ()])) session_start ();
таким образом, Мы стартуем сессию только тем, кто прислал идентификатор.
Соответственно, надо еще в первый раз отправить его пользователю – в момент авторизации.
Если имя и проль верные – пишем session_start () !

Самыми распространенными ошибками, которые выдает РНР при попытке работать с сессиями, являются такие:
Две из них,
Warning: Cannot send session cookie — headers already sent
Warning: Cannot send session cache limiter — headers already sent
вызваны одной и той же причиной, решение описано в этом факе здесь
Третья,
Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number (ранее она выглядела, как Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) ),
если перевести ее с английского, подробно объясняет проблему: недоступен указанный в php.ini путь к каталогу, в который пишутся файлы сессий. Эту ошибку исправить проще всего. Просто прописать каталог, который существует, и доступен на запись, например,
session.save_path = c:\windows\temp
И не забыть перезагрузить апач после этого.

Как выясняется, сообразительность людская не имеет пределов, и поэтому я вынужден пояснить:
сообщение о третьей ошибке (невозможно найти каталог) НЕИЗБЕЖНО приведет к появлению первых двух, поскольку сообщение об ошибке — это вывод в браузер и после него заголовками пользоваться нельзя. Поэтому не спешите искать преждевременный вывод, а сначала пропишите правильный путь!

Следующей по распространенности проблемой при работе с сессиями является тяжелое наследие register_globals. НЕ давайте переменным скрипта имена, совпадающие с индексами массива $_SESSION!
При register_globals=on значения будут перезаписывать друг друга, и вы запутаетесь.
А при register_globals=off появится другая ошибка: «Your script possibly relies on a session side-effect which existed until PHP 4.2.3.», в случае, если в скрипте есть переменная сессии не имеющая значения, и глобальная переменная с тем же именем. Чтобы от неё избавиться, надо всегда инициализировать переменные перед использованием (или хотя бы проверять на существование) и не давать глобальным переменным имена, совпадающие с индексами массива $_SESSION.

Если не работает, но и никаких сообщений не выводится, то добавьте в самое начало скрипта две строчки, отвечающие за вывод ВСЕХ ошибок на экран — вполне возможно, что ошибки есть, но вы их просто не видите.
ini_set ( ‘display_errors’ , 1 );
error_reporting ( E_ALL );
или смотрите ошибки в error_log. Вообще, тема отображения сообщений об ошибках выходит за рамки данной статьи, поэтому просто убедитесь хотя бы, что вы можете их видеть. Чуть продробнее о поиске ошибок можно прочитать в этом разделе.

Если вы уверены, что ошибок нет, но приведенный пример не работает все равно, то, возможно, в PHP не включена передача ид через урл, а куки по каким-то причинам не работают.
Смотрите, что у вас с куками.
Вообще, если у вас «не работают» сессии, то сначала попробуйте передать идентификатор сессии руками, то есть, сделать ссылку и приписать к ней идентификатор:
();
if (!isset( $_SESSION [ ‘counter’ ])) $_SESSION [ ‘counter’ ]= 0 ;
echo «Вы обновили эту страницу » . $_SESSION [ ‘counter’ ]++. » раз.

. $_SERVER [ ‘PHP_SELF’ ]. ‘?’ . session_name (). ‘=’ . session_id (). «>обновить» ;
?>
При этом следует убедиться, что не включена директива session.use_only_cookies , которая запрещает PHP принимать идентификатор сессии, если он был передан через URL

Если этот пример не заработает, то проблема либо в банальных опечатках (половина «проблем» с сессиями происходит от неправильно написанного имени переменной), либо в слишком старой версии PHP: поддержка сессий появилась в версии 4.0, а массив $_SESSION — в 4.1 (До этого использовался $HTTP_SESSION_VARS ).
Если же заработает — то проблема в куках. Отслеживайте — что за куку ставит сервер браузеру, возвращает ли браузер ее. Искать очень полезно, просматривая просматривая обмен HTTP-заголовками между браузером и сервером.
Объяснение принципа работы кук выходит за рамки этого и так уж слишком большого текста, но хотя бы убедитесь, что сервер куку с идентификатором посылает, а браузер — возвращает. И при этом идентификаторы совпадают друг с другом =)
Установка куки должна выглядеть, как
Set-Cookie: PHPSESS >
или как
Set-Cookie: PHPSESS >
(если вы запрашиваете скрипт не из корневого каталога)
Ответ сервера должен выглядеть, как
Cookie: PHPSESS >
либо
Cookie: PHPSESS >
если браузер возвращает другие куки, кроме идентификатора сессии.

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

Если пример отсюда работает, а ваш собственный код — нет, то проблема, очевидно, не в сессиях, а в алгоритме. Ищите, где потеряли переменную, по шагам переносите пример отсюда, отлаживайте свой скрипт.

Еще одна проблема может возникнуть, если вы используете перенаправление через header или навигацию с помощью JavaScript.
Дело в том, что РНР автоматически дописывает идентификатор сессии только к ссылкам вида , но не делает этого для header-ов, яваскрипта, мета-тегов.
Поэтому надо добавлять идентификатор руками, например, так:
header ( «Location: /script.php?» . session_name (). ‘=’ . session_id ());

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

Так же, весьма редкая, и совершенно непонятно, откуда появляющаяся, проблема бывает в том, что настройка session.save_handler имеет значение, отличное от files. Если это не так — исправляйте.

Безопасность
Безопасность сессий — тема обширная. Поэтому остановлюсь на нескольких основных моментах.
Самый хрестоматийный — не передавать идентификатор через адресную строку. Об этом написано даже в php.ini, но это ограничивает функциональность сессий. Если вы решите последовать этому совету, то кроме session.use_trans_s > Желательно привязывать сессию к IP адресу: таким образом, если идентификатор будет украден, то злодей все равно не сможет им воспользоваться в большинстве случаев.
Рекомендуется пользоваться директивой session.save_path, с помощью которой задать собственный каталог для сохранения файлов сессий. Это более безопасно, чем когда они хранятся в общем временном каталоге сервера по умолчанию.

Дополнительная информация:

  • Кроме кук, механизм сессий посылает еще и заголовки, запрещающие кэширование страниц (тот самый cache limiter). Для html это правильно и необходимо. Но вот когда вы пытаетесь скриптом, проверяющим авторизацию, отдать файл, то интернет эксплорер отказывается его скачивать. Именно из-за этого заголовка. Вызов
    session_cache_limiter ( «private» );
    перед стартом сессии должен решить проблему.
  • Как это ни кажется странным, но в массиве $_SESSION нельзя использовать числовые индексы — $_SESSION [ 1 ], $_SESSION [ ’10’ ] — cессии работать не будут.
  • Где-то между версиями 4.2 и 5.0 невозможно было установить session.use_trans_sid с помощью ini_set () . Начиная с 5.0 уже можно снова.
  • До версии 4.3.3 куку PHP отправлял куку только если при старте сессии в запросе отсутстввал идентификатор. Теперь же кука посылается при каждом вызове session_start ()
  • Пример авторизации с помощью сессий
    Проиллюстрируем все вышенаписанное небольшим примером:
    создадим файл auth.php:
    if (isset( $_POST [ ‘auth_name’ ]))
    <
    $sql = «SELECT * FROM users WHERE name=?s» ;
    $row = $db -> getRow ( $sql , $_POST [ ‘auth_name’ ]);
    if ( $row && password_verify ( $_POST [ ‘auth_pass’ ], $row [ ‘pass’ ])) <
    $_SESSION [ ‘user_id’ ] = $row [ ‘id’ ];
    >
    header ( «Location: http://» . $_SERVER [ ‘HTTP_HOST’ ]. $_SERVER [ ‘REQUEST_URI’ ]);
    exit;
    >

    if (isset( $_GET [ ‘action’ ]) AND $_GET [ ‘action’ ]== «logout» ) <
    session_start ();
    session_destroy ();
    header ( «Location: http://» . $_SERVER [ ‘HTTP_HOST’ ]. «/» );
    exit;
    >

    if (!isset( $_SESSION [ ‘user_id’ ])) <
    ?>

    exit;
    >

    Зачем нужны сессии.Механизм работы сессий.

    Зачем нужны сессии.Механизм работы сессий.

    Зачем нужны сессии

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

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

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

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

    Механизм работы сессий

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

    Немного о том, как сохранять переменную (обязательно глобальную) в сессии. Для этого мы должны ее зарегистрировать с помощью специальной функции. После регистрации мы можем быть уверены, что при следующем запуске сценария тем же пользователем она получит то же самое значение, которое было у нее при предыдущем завершении программы. Это произойдет потому, что при завершении сценария PHP автоматически сохраняет все переменные, зарегистрированные в сессии, во временное хранилище. Конечно, можно в любой момент аннулировать переменную — вычеркнуть ее из сессии, или же уничтожить вообще все данные сессии.

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

    Илон Маск рекомендует:  Новые расширения языка
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL