Любой, кто написал немного больший ASP, знает, что объект Session действительно прост в использовании. Его можно использовать для записи переменных личных данных пользователя, что и безопасно, и удобно. Но знаете ли вы, как работает Session? Любой, кто написал немного больший ASP, знает, что объект Session действительно прост в использовании. Его можно использовать для записи переменных личных данных пользователя, что и безопасно, и удобно. Но знаете ли вы, как работает Session? Возможно, поняв это, вы больше не осмелитесь пользоваться этим любимым и ненавистным предметом. Хотя альтернативный метод немного хлопотный, после долгосрочного рассмотрения его необходимо использовать.
Во-первых, давайте поговорим о преимуществах сеанса. Его можно использовать для записи переменных личных данных клиента, и они не исчезнут в течение определенного периода времени. Это действительно важная функция, особенно для систем с элементами, которые необходимо использовать. Например, учетная запись участника, время, статус и множество данных в реальном времени, которые должны быть записаны (например, система покупок, записывающая товары в корзину пользователя). Эта информация необходима каждому пользователю в частном порядке и обычно используется разработчиками. .Обработка записи сеанса.
Однако сеанс в ASP состоит из файлов cookie, и сервер передает все данные, записанные в сеансе, в браузер пользователя в форме файлов cookie. Обычно обычные браузеры сохраняют эти файлы cookie всякий раз, когда пользователь нажимает на ссылку и снова подключается к серверу, браузер отправляет эти файлы cookie обратно на сервер для обработки. Это принцип работы сеанса. Когда объем данных больше, поскольку его необходимо отправить и вернуть, это не только съедает пропускную способность линии, но и снижает производительность, поскольку серверу приходится тратить больше ресурсов на онлайн-обработку и перенастройку. Память. Первоначальное действие. Теперь вы можете подумать: «Мне придется использовать эту функцию, поэтому придется ею пожертвовать». есть альтернативы. Следующее, что появляется, это то, что он также принадлежит объекту приложения Global.asa.
Приложение также хорошо записывает и обрабатывает временные данные. Его возможности и использование во всех аспектах такие же, как и у Session. Однако для сравнения, записываемые им данные являются общедоступными, то есть пространством переменных, которым может поделиться любой пользователь. В отличие от сеанса, приложение не передает данные пользователю и не ждет следующего подключения, чтобы прочитать их обратно. Они напрямую записываются в память на сервере. Для сравнения, производительность намного выше, чем у сеанса.
Поскольку объект «Приложение» является общедоступным, первое, что необходимо сделать, — это спланировать общую область для каждого пользователя, чтобы каждый пользователь мог иметь свою собственную область для записи данных, чтобы достичь цели моделирования сеанса. Сейчас есть два подхода:
1. Инициализируйте, создайте и выделите пространство пользовательской памяти заранее при активации Сервера. Обычно, хотя этот подход занимает много ресурсов сразу после запуска Сервера, он также избавляет от необходимости выделять его каждый раз, когда пользователь. будет онлайн в будущем. Но есть ограничение: этот метод должен ограничивать максимальное количество людей. Поскольку он инициализируется сразу после активации, мы можем только оценить создание определенного объема памяти, поэтому этот метод обычно используется в небольших программах. например, чаты.
2. Этот метод следует считать более подходящим для крупномасштабных приложений. Он использует метод динамического выделения и начинает выделять ресурсы пользователю, когда пользователь впервые подключается к серверу. Целью этих двух методов моделирования сеанса является снижение потребления ресурсов сеанса, но, в конце концов, их нельзя полностью заменить. Нам все равно нужно использовать немного сеанса, что, по крайней мере, может значительно снизить нагрузку на систему. Сервер.
Первый вариант
Сначала приступаем к реализации первого решения. Поскольку Приложение инициализируется при активации, то, конечно же, нам придется начинать с Global.asa:
Инициализация завершена, но как ею пользоваться? Нам нужно только изменить данные, изначально сохраненные с помощью сеанса, такие как номер учетной записи и время входа в систему, в созданный нами объект приложения, в котором пользователь входит в систему:
Скопируйте код кода следующим образом:
'Ищите неиспользуемое пространство
Для i = 1 к приложению (ClientMax)
Если Приложение(User_Status_ & i) = 0 Тогда
'Временный номер пользователя
Сеанс (Индекс) = я
'запирание
Приложение Приложение.Lock
'Установить состояние использования
Application(User_Status_ & i) = 1 'Помещаем переменные данные
Приложение (User_Account_ & i) = Учетная запись
Приложение(User_Logtime_ & i) = Сейчас()
'Разблокировать
Приложение.Разблокировка
Выход для
Конец, если
Следующий
Чтобы получить переменные данные, связанные с пользователем, выполните следующие действия:
Response.Write(Приложение(User_Account_ & Session(Index))
Вы можете обнаружить, что разве не сказано не использовать сеанс? Тогда почему Session все еще существует в приведенном выше исходном коде? Как упоминалось ранее, эта альтернатива не может полностью заменить сеанс. Браузер не всегда находится в сети с сервером. Он будет отключен после прочтения страницы. Так как же нам узнать, что в следующий раз подключится тот же человек? В этот момент мы должны полагаться на сеанс. Мы даем пользователю набор чисел в реальном времени. Это число представляет собой количество переменных пространства пользователя в приложении. ключ и ключ. На нем указан номер, и номер на ключе позволяет служащему провести вас к вашему сейфу. Этот метод еще усовершенствован, но его достаточно для небольших приложений.
Второй вариант
Что касается предыдущего решения, вы также можете подумать, что наши настроенные номера записываются с использованием сеанса. Говоря о числах, объект Session предоставляет метод «SessionID». Правильно, независимо от того, хотим мы его использовать или нет, Сервер автоматически присвоит номер каждому пользователю, и этот номер не будет повторяться. Что касается этого номера, то он получается с помощью Session.SessionID. Эту нумерацию обязательно выполнит Session. Мы можем использовать ее для замены программы нумерации, которую мы написали сами, что также экономит много усилий и даже обеспечивает большую масштабируемость. Но, по сути, первое решение, приведенное выше, все еще находит применение, например, в небольших приложениях, таких как чаты, которые ограничивают количество людей. Следующая альтернатива — для более крупных систем.
Для сайтов с сотнями, тысячами или даже десятками тысяч посетителей в секунду предыдущее решение точно не подойдет. Предположим, вы установили верхний предел количества людей в 10 000. После активации Сервер поможет вам вырезать 10 000 областей для 10 000 пользователей. Если в области 5 переменных, и одна переменная занимает 32 байта, то 10 000 занимает больше. чем 320000 К (320МБ), Сервер Как только он активируется, в память набивается столько мусора, и производительность обязательно сильно снизится, прежде чем он выйдет на поле боя, и не смотрите на эти маленькие цифры, а думайте, что ваши 512 МБ будут; достаточно. Приведенные выше цифры предполагают минимальное количество, плюс неизвестно, сколько дополнительных ресурсов будет использовать сервер при настройке памяти, поэтому оно будет только больше, а не меньше. Поэтому единственным решением является динамическая настройка пространства пользовательских переменных и вырезание области только тогда, когда пользователь подключается к серверу. Таким образом, нет необходимости заранее настраивать огромную память.
Второй вариант относительно прост в реализации. Пожалуйста, выбросьте все, что есть в первом варианте. Нам не нужно трогать Global.asa. Нам нужно только изменить место входа пользователя и другие полезные места:
Скопируйте код кода следующим образом:
'LockApplicationApplication.Lock 'Помещаем переменные данные
Приложение (User_Account_ и Session.SessionID) = Учетная запись
Application(User_Logtime_ & Session.SessionID) = Now() 'Разблокировать Application.Unlock
Чтобы получить переменные данные, связанные с пользователем, выполните следующие действия:
Скопируйте код кода следующим образом:
Response.Write(Приложение(User_Account_ и Session.SessionID))
В прошлом я читал много книг, в которых говорилось, что сеансы очень требовательны к ресурсам, поэтому старайтесь не использовать их, но вам все равно придется использовать их, когда это необходимо, и книги не учили более подходящим решениям. Теперь, когда вы понимаете, как заменить Session, воспользуйтесь этим! Возможно, проблемы с производительностью, которые меня всегда беспокоили, можно значительно улучшить!