Введение
HTTP протокол сам по себе stateless.
Сессии нужны для хранения информации о пользователях. Они используют cookie делают примерно то же что и
cookies
но лишены большинства их
Сессии это инструмент для управления состоянием приложения.
Как и $_COOKIE $_SESSION это суперглобальная переменная
(
массив
)
, которая хранится на веб сервере.
У каждой сессии есть уникальный номер Session ID или SID
Сессия должна быть начата до отправки данных браузеру.
Данные на сервере и куки в браузере работают в связке. SID хранится в куки.
Сервер «помнит» пользователя пока работа с сайтом ведётся в сессии.
Сессия удаляется автоматически при закрытии браузера.
рассмотрим эти задачи в следующем параграфе
Инициализация сессии
Сессия начинается с помощью функции
Эта функция должна быть включена во все скрипты, в которых вам нужно использовать сессии.
Сперва выполняет проверку наличия активной сессии. Если сессии нет — начинает новую.
Сохраняет данные в супер глобальной переменной
$_SESSION,
которая является
массивом
Если последняя строка вам непонятна — прочитайте статью
«Тернарный оператор в PHP»
Демонстрацию работы session_start() в вашем браузере вы можете сделать на
этой странице
Посмотреть куки можно в Chrome DevTools → Application → Cookies
Выберите andreyolegovich.ru или urn.su и найдите AOSESSID
Изучить файл с данными о сессии можно в директории, которую вы указали в
php_value session.save_path
В моём
указан
Поэтому я смотрю содержимое там
cat ./tmp/sess_d510566d6fc7dcbf9a9c21eb29d846ce
username|s:6:»Andrei»;
Удаление сессии
Сессия истекает когда закрывается браузер, наступает таймаут, её явно делают просроченной.
Если не удалить данные, они так и будут лежать на сервере — это небезопасно.
Уничтожение сессии включает в себя:
- Удаление всех перемменых в сессии
- Удаление данных на сервере
-
Удаление
куки
в клиенте
session_destroy()
Удаляет все данные привязанные к сессии.
Не удаляет никаких переменных из суперглобальной переменной
$_SESSION.
Не удаляет куки.
Возвращает boolean — удалились данные или нет
Если использовать только
session_destroy()
можно переиспользовать
$_SESSION
просто вызвав
session_start()
unset()
unset() это стандартная PHP функция, которую использую не только с сессиями.
Чтобы очистить username нужно выполнить
Чтобы очистить всё можно обойтись без unset()
Пример полного удалёния сессии
Культура
Я заметил, что есть два типа программистов. Первые склонны использовать приложения, которые могут предложить больше, и более эффективны в различных действиях с кодом.
Но это сказывается на обучаемости приложения и легкости его использования. Это те программисты, которые предпочитают Vi(m) или Emacs.
Программисты, которые относятся ко второй категории, как правило, используют редакторы от самых простейших до IDE. Эта эволюция от простых до более сложных приложений происходит у них очень естественным способом.
В результате у них формируется совершенно другой менталитет и представление проекта и кода. Я программист из этой категории, поэтому в данной статье мы поговорим об IDE, которую я использую в данный момент: PHPStorm.
Вообще инструменты и предпочтения пользователей меняются настолько быстро, что я редко пишу о конкретных фреймворках или приложениях. Однако если вы используете приложение 10-14 часов каждый день, оно становится частью вас, частью того, как вы видите свой код и свои проекты.
Становится главной магистралью вашего повседневного рабочего процесса. Так что оно заслуживает упоминания и представления.
Добавление задач в очередь
Предыдущие примеры были слишком абстрактными. Рассмотрим на примере, приближенном к боевым условиям. Представим, что пользователь присылает изображения, и нужно их принять и обработать:
И добавив немного кода к базовому примеру, мы уже имеем рабочий скрипт, который сможет успешно сохранить изображения, и добавить их в очередь на обработку. Теперь, если пользователь загрузит даже 1000 изображений, то каждой из картинок будет создана задача в очереди.
А уже, внутри самого обработчика задачи, мы получим массив , которые был передан в метод .
В итоге, данные такого формата будут получены: .
Запуск воркера
Потому, есть несколько вариантов.
Первый — можно поставить на крон (скажем, выполнять задачу каждые 5 минут). И каждые 5 минут будут обрабатываться все задачи, добавленные ранее в очередь. Этот вариант рабочий, однако, недостаток в том, что задачи будут выполняться не сразу, а только в течении 5 минут.
Второй варианта — это зациклить скрипт на бесконечное выполнение. Этот подход позволяет один раз запустить скрипт, который, в цикле, с определённым интервалом будет проверять новые задачи, и их выполнять.
Или же, более продвинутый вариант, и рекомендуемый вариант, используя supervisor. Ранее, я уже демонстрировал работу с supervisor-ом при . Его очень просто настраивать, и запускать. Проблема, которую он решает, заключается в том, что он следит за запущеными процессами, и, если какой-то из них прерывает своё выполнение, то он, тут же пытается перезапустить его. Тем самым, supervisor следит, чтобы скрипт был всегда запущен.
Session Configurations Options
session.auto_start: автоматически начинает сессию.
По умолчанию выключена.
session.name: задаёт имя текущей сессии и сессионной куки
По умолчанию PHPSESSID.
Может быть изменено с помощью функции
session.save_path: путь по которому сохраняется информация о сессии
По умолчанию tmp директория сервера.
session.gc_maxlifetime: максимальное время жизни
По умолчанию 1440 секунд (24 минуты).
session.cookie_lifetime: время жизни куки, которая отправляется браузеру. По сути это значение, которое мы добавляем к time() когда
задаём
По умолчанию 0.
session.cookie_path: задаёт
По умолчанию ‘/’.
session.cookie_secure: задаёт
Если включить то куки будут отправляться только по HTTPS.
По умолчанию выключена.
session.use_strict_mode:
если включить то SID которые созданы не сервером будут отклонены.
По умолчанию выключена.
session.cookie_httponly: задаёт
Если включить куки будет доступна только по HTTP (и HTTPS). То есть
JavaScript
или
bbscript не смогут получить к куки доступ
По умолчанию выключена.
session.use_cookies: указывает нужно ли сохранять SID в
cookies
на стороне клиента.
По умолчанию включена.
session.use_only_cookies: заставляет сессию использовать
только
cookie
для хранения SID. Работает совместно с session.use_cookies
По умолчанию включена.
session.use_trans_sid: контролирует использование «прозрачных»
SID
Если включить — SID будет добавляться как параметр прямо в URL. Например:
Эту опцию обычно включают только тогда, когда нет поддержки
cookies
По умолчанию выключена.
Пользуйтесь trans sid с осторожностью так как это может поставить под угрозу безопасность пользователя.
- Пользователь может отправить URL содержащий активный SID другому человеку по email, irc и т.п.
- URL содержащая активный SID может быть сохранён на публично доступном компьютере.
-
— Пользователь может заходить на ваш сайт с одним и тем же SID который он сохранил в закладках или
истории браузера.
session.cache_limiter: указывает способ контроля за кэшем во время сессии.
Доступные варианты:
- nocache
- private
- private_no_expire
- public
По умолчанию
nocache.
Для сессий с
аутентификацией
нужно, чтобы кэширование в браузере было отключено.
session.cookie_samesite: контролирует доступности куки в кроссдоменных запросах.
Доступные варианты: Lax и Strict
Кросдоменные запросы могу быть не только от злоумышленников. Их может делать ваш сайт с разных поддоменов.
Либо вы можете следить за перемешением пользователя между своими проектами.
Заключительное слово
Современные IDE имеют еще столько интересных функций, что мы могли бы написать об этом три статьи и все равно не раскрыть их все.
Но мы должны на этом остановиться. Поэтому в качестве заключения нашего мини-марафона о PHPUnit-функциях PHPStorm, вот короткий обзор еще нескольких функций, которые я нахожу очень полезными:
Онлайн шаблоны — они прекрасно подходят для создания ваших собственных шаблонов. Например, когда я пишу эту статью в HTML мне нужно соблюдать определенный набор тегов и других элементов форматирования.
У меня есть несколько симпатичных шаблонов, которые делают это вместо меня, поэтому, к примеру, время на добавление изображения в статью у меня сводится ко времени необходимому, чтобы нажать одну клавишу на клавиатуре. Вместо того чтобы прописывать синтаксис изображения и стили.
Управление проектами — это довольно типичная для IDE функция. Все ваши файлы организованы в проекты. Но программисты JetBrains сделали кое-что действительно удивительное.
Их движок индексации просто быстр, как фурия. Ни одной другой IDE не удалось загрузить наш огромный проект на Syneto так быстро. А затем так же быстро провести по нему поиск.
Фактически интегрированные среды разработки, такие как NetBeans или Eclipse и его производные, как правило, не в состоянии проиндексировать весь проект.
Это делает поиск очень медленным. PHPStorm делает это корректно и очень быстро по сравнению с любой другой IDE.
Интеграция версий документов — это еще один козырь в колоде PHPStorm. Mercurial, Git, CVS, Subversion, вы можете сами продолжить этот список. PHPStorm чувствует себя как рыба в воде с каждым из них.
От выборочной фиксации и установления совместимости с различными инструментами и до разнообразных графических функций — все это вы имеете в своем расположении.
Так как я являюсь пользователем PHPStorm, мне приходилось использовать CLI для выдачи команды «hg», возможно, два раза или около того. И он просто работал.
Макросы — полезны для тех небольших, но раздражающих повторяющихся задач, которые вам нужно постоянно выполнять. В PHP каждая строка должна заканчиваться точкой с запятой. Как часто ваш курсор находится в конце строки, когда вы закончили писать весь ее код?
Очень редко. Как правило, вы работаете над контекстом самой строки: прописываете в скобках некоторые параметры или что-то вроде того. А после этого вам нужно перейти в конец строки и нажать «;». Что ж, с помощью макросов это легко автоматизировать.
Ок, достаточно разговоров. Не буду больше удерживать вас, чтобы вы могли сами скачать и попробовать PHPStorm.
Наслаждайтесь.
Вадим Дворниковавтор-переводчик статьи «PHPStorm When the IDE Really Matters»
Когда звонить и что говорить
Есть несколько ситуаций, когда необходимо совершать теплый обзвон:
- Клиент давно ничего у вас не покупал — надо его возвращать;
- У вас появился новый товар или услуга — самое время об этом сообщить;
- Предстоит повышение цен — можно мотивировать клиента совершить покупку сейчас, по старой цене;
- Запускается промоакция или действует спецпредложение — теплые звонки в этом случае — еще один канал коммуникации;
- Ваша компания уже давно не была на слуху — пора о ней напомнить.
Мотивы теплых звонков могут быть разными, но структура беседы остается неизменной. Итак, примерный сценарий разговора с теплым клиентом:
- Поздоровайтесь и представьтесь. Клиент, скорее всего, вас помнит, так что затягивать с этим пунктом не нужно;
- Спросите, удобно ли собеседнику сейчас разговаривать. Если нет, то уточните, когда лучше перезвонить;
- Напомните про предыдущее сотрудничество;
- Раскройте суть звонка — что вы хотите предложить и зачем;
- Выслушайте возражения и ответьте на них, если они есть;
- Окончательно зафиксируйте или покупку, или отказ;
- Если договорились о сделке, то обсудите следующий этап коммуникации. Например, пригласите в офис на подписание договора;
- Попрощайтесь.
Читать по темеМаркетинговые приемы для увеличения продаж
Теперь, когда вы узнали, в какой ситуации нужен теплый звонок и что говорить, посмотрите примеры готовых скриптов для отдела продаж и адаптируйте под свои потребности.
Алгоритм создания скрипта для теплых звонков
Прежде всего нужно поставить основную цель звонка. Каждый диалог должен преследовать определенный результат. Вам нужно понимать, как оценить последствия взаимного общения. Оба собеседника (клиент и продавец) должны осознавать свои задачи и что они желают получить. Чтобы прийти к взаимному согласию, заранее наметьте цель вашей беседы и то, на что готов клиент на данном шаге сделки.
Затем проанализируйте вашу компанию. Чтобы создать скрипт теплых продаж по телефону, нужно изучить работу своей фирмы, ее продукцию, товары конкурентов, потребительскую аудиторию и ее запросы (что предпочитают люди и чем руководствуются при выборе).
Идем дальше. Перед написанием скрипта сделайте несколько пробных звонков
Важно понять, в чем заинтересован покупатель и какие вопросы задает ваша ЦА. Если затрудняетесь с ответами, вначале проанализируйте компанию, чтобы знать, что говорить.
Теперь приступайте к написанию скрипта. По большому счету, процесс этот неограничен. Начните с главных тезисов и первых фраз. Обдумайте типичные ответы покупателя и набросайте план беседы. В дальнейшем можно дополнять сценарий новыми вопросами клиентов, а в вашей сфере станут появляться новые методики и нормы. То есть вы будете все время актуализировать свой скрипт.
Как сделать скрипт теплых звонков результативным? Даем советы новичкам:
- Пишите просто, так же как вы говорите. Перед тем как вставить предложение, скажите его вслух. Если режет ухо – измените.
- Применяйте разговорный лексикон – кредитка, круто, классно, электронка. Ваша речь должна быть натуральной. Если вместо привычной фразы «Классная идея» произнести «Как замечательно вы это придумали», ваш собеседник покрутит пальцем у виска. Если этические нормы вашей фирмы не позволяют вольного общения, постройте свою речь гораздо строже, но все равно естественно.
- Предусмотрите мимику менеджера в диалоге. Это в порядке вещей. Если продавец улыбается при разговоре, то собеседник это ощущает даже в телефонном разговоре. А значит, улыбайтесь, когда можно, и будьте серьезны, когда этого требует ситуация.
- По мере возможности вставляйте шутки. Если клиент что-то не понял, объясните это образно. Сухая речь довольно часто вызывает неприятие. Запомните – чем натуральнее вы говорите, тем приятнее с вами общаться. При этом возрастают шансы на успех.
Теперь тестируем свой скрипт теплых продаж по телефону. Оптимальный способ проверить его эффективность – попробовать себя в роли клиента. Дайте коллеге ваш сценарий, и пусть он побеседует с вами как с клиентом. В разговоре наблюдайте за приемами звонящего и тем, как вы реагируете на его слова. Оцените, как работают его призывы к действию. Затем поменяйтесь ролями и изучите приобретенный опыт.
И в заключение хочется сказать, что каждый скрипт — живой. Невозможно долго применять единожды написанный шаблон. Когда начнете с ним работать, вы поймете, что привнести в текст или как его изменить. Сценарий разговора постоянно адаптируют под новые потребности, товары, нормы, ситуацию на рынке. Если ваш скрипт длительное время существует в неизменном виде, он точно требует значительной корректировки.
Получите персональный аудит отдела продаж от Сергея Азимова для 3-кратного роста продаж в 2021 году совершенно бесплатно
Проведем аудит Вашего отдела продаж по 24 пунктам и дадим четкий план по увеличению прибыли!
Что такое воркер?
Воркером может быть что угодно! Он может быть реализован на любом языке программирования (PHP, C, Ruby, Python), главное — чтобы он позволял подключаться, и общаться с самой очередью. Для PHP есть замечательная библиотека, которую я настоятельно рекомендую испробовать. Воркер — это интерфейс, который позволяет общаться с самой очередью. То есть, у вас должна быть установен драйвер очереди, и сама библиотека для работы с очередью.
Рассмотрим простой пример работы воркера:
Код выше просто показывает, как в PHP подключиться к очереди, используя библиотеку Pheanstalk, как настроить очередь и доставать доступные задачи из очереди. Скрипт последовательно извлекает задачи, выполняет, и когда задач не останется — завершает своё выполнение.
Однако, в коде выше есть небольшой нюанс. Если запустить этот код, и в нём будет задание, то это задание будет циклично повторно выполняться. Эта задача никогда не будет удалена из очереди. Потому, чтобы удалить задачу из очереди изменим код:
4 варианта, где взять скрипты продаж для менеджеров
Самостоятельное творчество
Каждая организация мечтает заполучить скрипты для менеджеров по продажам бесплатно. Многие решают не тратиться на работу специально обученных людей и пишут скрипты сами, методом проб и ошибок находя идеальный продающий сценарий.
Для компании – новичка на рынке такой подход является подчас единственным доступным, поскольку лишних ресурсов для привлечения профессиональных тренеров попросту нет. Однако есть и существенный минус: за время, потраченное на создание действенного модуля, потенциальных клиентов уведет более подготовленная компания.
Имея достаточный опыт активных продаж, скрипт продаж для менеджеров можно написать быстро. Проверив несколько вариантов на сотне клиентов, знающий руководитель отдела продаж способен создать подходящий сценарий, который можно будет скорректировать в процессе работы. Этот способ хорошо подойдет компаниям, имеющим в штате опытного директора по продажам.
Приобрести готовые модули
Хорошенько поискав в Сети, можно найти множество вариантов готовых скриптов продаж для менеджеров по продажам. Также найдутся и специалисты, пишущие модули под заказ
Важно учитывать уровень профессионализма автора и не полагаться на авось, приобретая первый попавшийся сценарий. Кроме того, нужно понимать, что без опытного тренера готовый скрипт может оказаться бесполезен
Любому скрипту требуется подробная инструкция, а лучше человек, способный доходчиво все растолковать.
Иметь в штате собственного специалиста по разработке скриптов
Довольно затратный способ, но он окупится уже в первые месяцы. Найдите или переманите у конкурента человека, который будет на постоянной основе обеспечивать компанию рабочими скриптами продаж для менеджеров. Помимо написания сценария, специалист также будет инструктировать персонал.
Перенять опыт конкурентов
У большинства компаний существуют отработанные схемы продаж, которые всегда можно подстроить под свои нужды. Способ не популярный среди руководителей, но весьма эффективный. Наблюдение за работой конкурирующих организаций помогает вникнуть в структуру рынка и учесть свои ошибки.
Нередко руководители идут на хитрость, отправляя сотрудников поработать некоторое время в другой фирме. Отучившись там в течение 2-3 месяцев, менеджер возвращается обратно, имея некоторый опыт, который можно применить на практике, доработав с учетом особенностей своей компании.
Пример .htaccess
Настройки вашего сервера могут отличаться, это просто пример
# Use php_flag for boolean values,
# php_flag session.auto_start off
php_flag session.use_cookies on
php_flag session.use_only_cookies on
php_flag session.use_trans_sid off
php_flag session.use_strict_mode on
# Use php_value for non-boolean values
# Enclose values that contain punctuation in quotes.
php_value session.cache_limiter nocache
php_value session.cookie_samesite Lax
php_value session.name AOSESSID
php_value session.save_path ./tmp
# Cookie settings
php_value session.cookie_path ‘/’
php_value session.cookie_lifetime 0
php_flag session.cookie_httponly on
php_flag session.cookie_secure on