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

Краткий обзор двойной системы входа Joomla
Joomla, любимец среди разработчиков сайтов, известна своей надежностью и гибкостью. Однако эта сила иногда означает дополнительный шаг для ее пользователей. Когда вы работаете на бэкенде вашего сайта, возможно, добавляя новую статью или корректируя настройки, и хотите предварительно просмотреть эти изменения на фронтенде, стандартное поведение Joomla требует от вас отдельного входа на фронтенд. Почему? Основная причина — безопасность. Наличие двух отдельных механизмов входа может предотвратить потенциальные несанкционированные доступы.
Магия Общих Сессий
Хотя двойная система входа является функцией безопасности, постоянный вход может быть утомительным, особенно когда вы часто переключаетесь между бэкендом и фронтендом. Здесь на помощь приходит функция «Общие сессии». Она предлагает более сглаженный опыт, синхронизируя сессии входа, то есть если вы вошли на бэкенд, вы также вошли на фронтенд и наоборот.
Пошаговое руководство по активации Общих Сессий в Joomla
Интересуетесь, как активировать эту функцию? Давайте рассмотрим процесс пошагово.
- Перейдите в панель администратора: Начните с входа в панель управления вашего сайта Joomla.
- Доступ к Глобальной Конфигурации: В панели управления найдите «Control Panel». Затем найдите и кликните на «Global Configuration».
- Перейдите в настройки сессии: В разделе «Global Configuration» перейдите на вкладку «System». На этой вкладке размещены различные системные настройки, включая «Session Settings».
- Активируйте Общие сессии: В разделе «Session Settings» вы заметите опцию «Shared Sessions». По умолчанию она может быть установлена в «NO». Переключите ее в «YES».
- Сохраните изменения: После переключения убедитесь, что нажали кнопку «Save» для применения изменений.

Поздравляем! Теперь вы синхронизировали обе сессии входа. Это означает меньше прерываний и более плавный опыт работы с Joomla.
Зачем использовать Общие сессии Joomla?
Хотя очевидное преимущество Shared Sessions — это уменьшение сложностей с входом, это также о том, чтобы ускорить ваш рабочий процесс. Вы можете легко переключаться между фронтендом и бэкендом, экономя ценное время при разработке веб-сайта или создании контента.
Дополнительные советы для лучшего опыта работы с Joomla
Joomla богата функциями, и знание некоторых дополнительных трюков может действительно повысить ваш пользовательский опыт. Вот некоторые из них:
- Регулярно создавайте резервные копии: Всегда убедитесь, что вы создали резервную копию вашего сайта Joomla, особенно перед внесением крупных изменений. Инструменты вроде Akeeba Backup могут помочь в этом.
- Используйте проверенные расширения: Хотя Joomla предлагает множество расширений, не все из них созданы равными. Придерживайтесь хорошо отзывчивых и высоко рекомендуемых для оптимальной производительности сайта и безопасности.
- Оставайтесь обновленными: Как и любое другое программное обеспечение, Joomla регулярно выпускает обновления, которые устраняют ошибки и вводят новые функции. Убедитесь, что вы обновляетесь своевременно для стабильного опыта.
Заключение
Joomla, со своими мощными функциями, остается лучшим выбором для многих веб-разработчиков. Хотя двойная система входа приоритизирует безопасность, функция Общие Сессии предлагает баланс между удобством и безопасностью. Активировав его, вы делаете свой рабочий процесс более плавным и эффективным.
Мы надеемся, что вы нашли это подробное руководство по Общим Сессиям Joomla проницательным. Продолжайте изучать, и не забудьте следить за последними новостями во вселенной Joomla. Подпишитесь на нашу рассылку для получения больше советов и делитесь своими мыслями в комментариях ниже!
HTTP сессия. Session. Состояние сеанса. Работа с сессиями в ASP.NET MVC
Прежде чем мы дадим определение термину «сессия», давайте немного рассмотрим предысторию, зачем вообще возникла потребность в сессиях, рассмотрим одну особенность протокола HTTP. Одной из основных особенностей протокола HTTP является то, что он не обязывает сервер сохранять информацию о клиенте между запросами, то есть идентифицировать клиента. Это так называемый stateless-протокол. Связь между клиентом и сервером заканчивается как только завершается обработка текущего запроса. Каждый новый запрос к серверу подразумевается как абсолютно уникальный и независимый, даже если он был отправлен повторно от одного и того же источника.

Один клиент отправляет запросы. Сервер думает, что это разные клиенты
Что, если оставить stateless-природу протокола HTTP и не идентифицировать пользователя? Без состояний сеанса можно легко обойтись, если на вашем сайте представлена статичная (обезличенная) информация, например, новостная статья, состоящая из текста и изображений. В таком контексте совершенно необязательно ассоциировать несколько запросов с одним пользователем. Ведь содержание статьи никак не изменится, будь то десять запросов с одного устройства, либо десять запросов от разных людей с разных устройств. Но как только мы собираемся передать персональную информацию на сервер, нам необходимо каким-то образом сделать так, чтобы сервер ассоциировал все наши запросы именно с нами, и в будущем верно определял все исходящие от нас запросы. Если этого не сделать, то с каждым новым запросом мы будем вынуждены повторно передавать необходимые персональные данные. Например, логин для входа в личный кабинет на сайте, или такую информацию как имя, адрес доставки, при совершении покупки в интернет-магазине. Вот как раз в таких ситуациях, когда требуется персонализировать запросы от одного клиента, мы будем использовать сессии.
Сессия (session) – это некоторый отрезок во времени, в пределах которого веб-приложение может определять все запросы от одного клиента.
- скрытые поля на HTML-форме (hidden form fields)
- куки (cookies)
- сессия (session, session State)
Попробуем их реализовать, используя платформу ASP.NET. Давайте кратко рассмотрим первые два механизма, и особое внимание уделим третьему, как более надежному, удобному и безопасному.
Скрытые поля на HTML-форме (hidden form fields)
Суть данного подхода состоит в том, что мы обеспечиваем навигацию по сайту при помощи стандартных html-форм. И при каждом следующем запросе мы сохраняем данные из предыдущего в скрытых полях на форме. Например:
@using (Html.BeginForm("Forms2", "Home", FormMethod.Post)) < Заказ блюда
>
public ActionResult Forms2()
@using (Html.BeginForm("Forms3", "Home", FormMethod.Post)) < @($"Добрый день ! Что будете заказывать?")
>
В данном примере мы на первой html-форме получаем имя пользователя. Далее в контроллере в методе Forms2() мы извлекаем это значение из коллекции Form и передаем в представление посредством объекта ViewBag. В этом представлении генерируется код новой формы и в скрытом поле сохраняется имя пользователя. Таким образом, значение имени пользователя будет передано уже на третью формы вместе с дополнительной информацией — значением поля с именем «foodName». И так далее.
Давайте рассмотрим особенности такого подхода. Плюсов практически нет, разве что реализовать данную технику можно очень быстро. Но опять же и другие подходы тоже можно реализовать очень быстро. А вот минусы есть, и довольно существенные:
- Во-первых, этот вариант не будет работать, если html-формы на наших страницах статичны, то есть жестко закодированы. И чтобы это исправить, чтобы повлиять на html-разметку мы прибегаем к помощи какой-нибудь серверной технологии (в данном случае механизм ViewBag);
- Это безопасность. Хоть вводимые нами данные не передаются через url-параметры в адресной строке и визуально не видны на странице, мы с легкостью можем их получить или подменить или удалить или украсть просто изучив исходный код страницы или структуру запроса;

Исходный код страницы с html-формой
Куки (cookies)
public ActionResult Cookies2()
@using (Html.BeginForm("Cookies3", "Home", FormMethod.Post)) < @($"Добрый день ! Что будете заказывать?")
>
В данном подходе мы не храним сессионные данные непосредственно на форме, вместо этого используется стандартный механизм работы cookies между клиентом и сервером. В cookies и хранятся все пользовательские данные.
При выборе этого подхода опять же главной остается проблема безопасности наших данных, которые мы передаем на сервер – их легко подменить или украсть, они лежат в открытом виде. Также, если в настройках приватности браузера клиента отключен прием куки с сайтов, то такой вариант ведения сессии вовсе не будет работать.
Таким образом, передавать первыми двумя способами важные и секретные данные крайне не рекомендуется, такие как логины, пароли, номера карт, счетов, данные паспорта, места жительства и т.д.
Серверный механизм управления сессией (Session, SessionState)
Разберем, как работает механизм сессии со стороны сервера и со стороны клиента.
При стандартных настройках работы состояния сеанса для отслеживания серии запросов от одного клиента используется т.н. сессионная куки (session cookie). Алгоритм следующий:
- Абсолютно для каждого нового запроса на сервер (неважно, разные это клиенты или один) ASP.NET генерирует уникальный идентификатор сессии.
Идентификатор сессии представляет собой случайно сгенерированное число, закодированное с помощью специального алгоритма в строку длиной 24 символа. Строка состоит из литералов от A до Z в нижнем регистре, а также чисел от 0 до 5. Пример идентификатора — hjnyuijl1pam3vox2h5i41in - Если в течение текущего запроса данные клиента НЕ сохраняются для дальнейшей работы с ним, то и время жизни сессии этого клиента заканчивается (фактически не начавшись). При этом ранее сгенерированный идентификатор сессии становится недействительным (так как не был использован). В ответ на такой запрос клиент не получает ничего, чтобы связало его с новой сессией.
- Если же данные клиента (например, имя, адрес доставки товара) сохраняются на сервере, ASP.NET связывает сохраненные данные с ранее сгенерированным идентификатором сессии. Далее создается специальная сессионная куки, и в нее записывается также этот идентификатор. Эта куки добавляется в ответ на запрос и сохраняется в браузере клиента. Таким образом, создается связь клиента и его персонализированной информации на сервере. Новая сессия для данного клиента создана.
- При каждом следующем запросе клиент передает на сервер персональный идентификатор сессии через куки. Сервер сопоставляет идентификаторы и «узнает» клиента в рамках текущей сессии.
- До тех пор пока клиент передает свой персональный ключ, сессия считается активной. Сессия может закончиться по разным причинам, например, вручную на стороне сервера или по истечении какого-то установленного времени (таймаут).
От теории перейдем к практике. Давайте запрограммируем данный алгоритм и посмотрим, как он выполняется. Для этого используем специальный класс HttpSessionState . При работе в контроллере можно воспользоваться свойством HttpContext.Session . Работать с сессией очень просто, как с любой NameValueCollection :
Session["userName"] = Request.Form["userName"]; bool isSessionNew = Session.IsNewSession; string sessionId = Session.SessionID;
В этом участке кода мы записываем в состояние сеанса имя пользователя. Это имя мы забираем с html-формы, которую он нам отправил. Дополнительно через свойства мы узнаем, создана ли эта сессия только что, то есть в рамках текущего запроса (если да, то и значение свойства IsNewSession будет равняться true), и уникальный идентификатор сессии. Этот идентификатор после обработки запроса будет автоматически записан в сессионную куки (если еще нет) и отправлен в ответе клиенту.
В браузере клиента можно наблюдать соответствующую куки и идентификатор его сессии:

В процессе следующего запроса от этого клиента давайте прочитаем его ранее сохраненное имя из сессии. Также принудительно завершим сессию. Работа с этим клиентом закончена, например, все данные обработаны и товар отправлен.
string userName = Session["userName"].ToString(); //обработка запроса. Session.Abandon();
Как видно, работать с сессиями очень просто и удобно. Большинство процессов, связанных с обработкой сессии, происходит автоматически в фоновом режиме. Естественно, разработчик может вмешаться на любой стадии обработки сессии и внести свои коррективы.
Давайте посмотрим на наиболее интересные свойства и методы класса HttpSessionState , которые чаще всего используются в работе:
Item[index] – возвращает элемент данных по его индексу
Item[key] – возвращает элемент данных по его ключу
Remove(index) – удаляет элемент данных по его индексу
Remove(key) – удаляет элемент данных по его ключу
Clear() – удаляет все данные
Count – возвращает общее количество элементов данных для текущей сессии
Abandon() – принудительно завершить сессию
SessionID — возвращает идентификатор текущей сессии
IsNewSession – возвращает true если сессия была создана в рамках текущего запроса
Timeout – возвращает число минут, допустимое между запросами, перед тем как сессия завершится по причине таймаута (по умолчанию, 20 минут)
Изменить настройки для сессии можно либо программно в коде посредством членов класса HttpSessionState , либо через конфигурацию приложения (файл web.config). Например:
В конфигурации выше мы указали, что таймаут сессии будет 40 минут, сессионные данные пользователя будут храниться в оперативной памяти, будут использоваться сессионные куки, также поменяли стандартное название такой куки на собственное.
И еще одно важное замечание в плане безопасности. Когда вы завершаете сессию пользователя методом Session.Abandon(); сессионная куки, хранящая идентификатор сессии SessionId, в браузере пользователя не удаляется. Это означает, что если пользователь начнет новую сессию в ближайшее время, не закрывая браузер, то его новой сессии будет присвоен тот же SessionId. Желательно каждой новой сессии всегда присваивать новый уникальный идентификатор, для этого нам нужно вручную удалять сессионную куки после закрытия сессии:
Session.Clear(); //очищаем сессию Session.Abandon(); //отменяем сессию //вручную очищаем куки так Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); //или сокращаем время жизни Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-30); //ASP.NET_SessionId - это стандартное название сессионной куки, у вас может быть свое
Вот таким образом происходит отслеживание состояния сеанса пользователя на платформе ASP.NET, с использованием сессий. Этот подход является стандартом и рекомендуется к использованию, когда необходимо сохранять информацию о пользователе и идентифицировать его между запросами на сервер.
Пример по шагам с использванием двух терминалов в одном рабочем пространстве Proxy32
Создать терминал и подключить его к удаленному оборудованию. Это сессия терминала, которую мы будем разделять.

Рис.2 Терминал разделяемой сессии (вверху) и терминал, который будет использоаться для подключения к разделяемой сессии, (внизу) готовы к работе.
Шаг 2:
Извлечь информацию, которую нужно передать другим пользователям, чтобы они могли подключиться к разделяемой сессии (к терминалу, который мы создали на шаге 1). Для этого необходимо открыть в разделяемом терминале выпадающий список, который находится справа от кнопки с изображением замка (ссылка 10) и в этом списке выбрать строчку, которая содержит информацию о подключении.

При выборе строчки ее текст копируется на клипборд, так что его легко вставить в текстовое сообщение или в e-mail и отправить пользователю, который будет использовать эту информацию, чтобы подключиться к разделяемой сессии. Содержимое списка состоит из 3-х частей. В верхней части указан номер порта, к которому нужно подключаться, чтобы получить доступ к разделяемой сессии (каждая разделяемая сессия или окно терминала имеют свой уникальный номер порта). Во второй части списка после горизонтальной линии приведен перечень IP адресов, к которым можно подключаться, чтобы получить доступ к разделяемой сессии терминала. В третьей части списка после горизонтальной линии приведен список комбинаций протокол/IP адрес/порт, которые можно использовать, чтобы подключаться к разделяемой сессии терминала. Протокол может быть или TELNET или TELNET-TLS в зависимости от состояния кнопки включения TLS (ссылка 9).

Список IP адресов может содержать только один IP адрес 127.0.0.1, если включена опция «TSS Server listens only on loopback IP» в меню терминала «Control/Sharing Terminal Session with other users/TELNET/TLS SERVER». Выпадающий список содержит информацию в разных сочетаниях, чтобы пользователь мог выбрать, какой элемент списка он хочет скопировать на клипборд для передачи другому пользователю. Содержимое списка обновляется каждый раз, когда он открывается. При повторном открытии список IP адресов или протокол могут измениться, если изменилась конфигурация терминала или компьютера. Кроме того, пользователь должен убедиться, что опция «TSS Server denies new connections» в меню терминала не включена. При использовании протокола TELNET-TLS для разделения сессии может возникнуть необходимость задать параметры протокола TLS, включая выбор сертификата, который будет использоваться при аутентификации подключения к разделяемой сессии.

Рис.3 Владелец разделяемой сессии копирует то клипбоард информацию (путем ее выбора из выпадающего списка) «telnet belous-PC 64382», которая нужна для подключения к разделяемой сессии .
TELNET сервер в каждом из окон терминала использует свой уникальный номер TCP порта для того, чтобы принимать запросы на подключение, приходящие от TELNET терминалов удаленных пользователей. Таким образом, путем выбора номера порта для подключения удаленный пользователь может выбирать к какому из окон терминала основного пользователя он будет подключаться.
По умолчанию в Proxy32 при создании нового окна встроенного терминала номер TCP порта для встроенного TELNET сервера выбирается из списка свободных портов, которые имеются в системе. Если несколько окон встроенного терминала создаются подряд одно за другим, то выбранные номера портов могут оказаться последовательными. Если окно встроенного терминала закрывается, то используемый номер порта освобождается и впоследствии может быть назначен одному из вновь создаваемых окон. По умолчанию пользователь не имеет контроля над тем, какие номера портов выделяются вновь создаваемым окнам терминала. В ситуации, когда TELNET сервер находится за Firewall-ом, то пользователь может выбрать опцию, при которой каждое вновь создаваемое окно будет пытаться использовать заданный начальный номер порта, например, 1300. Если этот номер порта свободен, он будет использован, а если он занят, то это окно будет пытаться использовать следующий номер порта 1301. Процесс будет продолжаться путем увеличения номера порта на единицу до тех пор, пока свободный порт не будет найден и использован. Следующее создаваемое окно терминала будет использовать такой же алгоритм для выбора номера порта. В результате все создаваемые окна будут иметь номера портов в диапазоне 1300 и чуть выше при условии, что этот диапазон портов свободен в системе. Пользователь может включать и выключать этот алгоритм выбора портов, а также выбирать начальный номер порта, который по умолчанию равен 1300. Эти настройки находятся в меню “Settings/Initial Terminal Settings/Terminal Session Sharing”. Начальный порт по умолчанию был выбран для использования на Windows XP, а при использовании Proxy32 на других операционных системах начальный порт может быть скорректирован для того, чтобы его значение попадало в диапазон свободных портов, которые позволено использовать в конкретной операционной системе. При использовании Firewall диапазон портов, используемый окнами терминала Proxy32 (в нашем примере диапазон портов, начиная с 1300 и чуть выше) должен быть открыт в Firewall для того, чтобы удаленные пользователи могли подключаться к этим окнам терминала.
Шаг 3.
Удаленный пользователь использует полученную информацию для подключения к разделяемой сессии. Если удаленный пользователь получил от владельца разделяемой сессии строчку «telnet belous-PC 64382», которая скопирована из выпадающего списка в разделямом терминале, то он может вставить эту строчку в свой bash терминал и нажать клавишу Enter для подключения к разделяемой сессии. При использовании протокола TELNET-TLS для разделения сессии может возникнуть необходимость задать параметры протокола TLS, включая выбор сертификата, который будет использоваться при аутентификации подключения к разделяемой сессии.

Рис.4 Удаленный пользователь вводит информацию «telnet belous-PC 64382», которая нужна для подключения к разделяемой сессии, на подсказку bash (клавиша Enter еще не нажата).
Шаг 4.
Владелец разделяемой сессии получает информацию о том, что удаленный пользователь подключился к разделяемой сессии. Эта информация появляется как сообщение в окне разделяемого терминала. Кроме того, список всех удаленных пользователей, подключенных к разделяемой сессии находится в выпадающем списке (ссылка 11 на рис. 1) в нижней части окна разделяемого терминала.


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

Рис.6. Удаленный пользователь, подключеный к разделяемой сессии, или владелец разделяемой сессии напечатали команду «pwd» на подсказку разделяемой сессии и получили результаты выполнения команды в оба терминала.
Шаг 6.
Удаленный пользователь отключается от разделяемой сессии, разрывая соединение в своем терминале (например, нажимает «Ctrl-]», а затем печатает «quit» на подсказку «telnet>»). Владелец разделяемой сессии получает информацию о том, что удаленный пользователь отключился от разделяемой сессии. Эта информация появляется как сообщение в окне разделяемого терминала. Кроме того, список всех удаленных пользователей, подключенных к разделяемой сессии находится в выпадающем списке (ссылка 11 на рис. 1) в нижней части окна разделяемого терминала. Владелец разделяемой сессии может сам отключить удаленного пользователя (или запретить ему печатать в разделяемую сессию), используя команды в меню терминала.

Рис.7. Удаленный пользователь отключил telnet-соединение от разделяемой сессии, а владелец разделяемой сессии получил сообщение об отключении удаленного пользователя.
Shared Session

Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Войти
Уже зарегистрированы? Войдите здесь.
Больше способов поделиться.
Похожие публикации
Session & opencart. WTF?
Автор: Vladzimir, 22 мая
Модуль Redis Session Driver (Хранение сессии в Redis) [Поддержка]
- redis
- session
- (и ещё 7)
$this->session->data[‘shipping_method’]
Автор: Linkoln, 2 марта 2022
[Поддержка] AlektroNik-Cookies-Session-Secure-HttpOnly-SameSite
Автор: AlektroNik, 4 августа 2021
Сейчас на странице 0 пользователей
- Нет пользователей, просматривающих эту страницу.
Покупателям
- Оплата дополнений физическими лицами
- Оплата дополнений юридическими лицами
- Политика возвратов
Разработчикам
- Регламент размещения дополнений
- Регламент продаж и поддержки дополнений
- Виртуальный аккаунт автора
- Политика продвижения объявлений
- API каталога дополнений
- Урегулирование споров по авторским правам
Полезная информация
- Публичная оферта
- Политика возвратов
- Политика конфиденциальности
- Платежная политика
- Политика Передачи Персональных Данных
- Политика прозрачности
Последние дополнения
![]()
![]()
![]()
![]()
![]()
- Язык
- Обратная связь
Движок интернет магазина OpenCart (ocStore) — официальный сайт OpenCartForum.com Powered by Invision Community
- Уже зарегистрированы? Войти
- Регистрация
Раздел покупок
ocStore
- Назад
- Официальный сайт
- Демо ocStore 3.0.3.2
- Демо ocStore 2.3.0.2.4
- Скачать ocStore
- Документация
- История версий ocStore
Шаблоны
OpenCart.Pro
- Создать.
Важная информация
На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.