Pull to refresh

PHP: первое знакомство с garbage collection

Lumber room
Столкнулся я недавно с небольшой проблемой: данные из сессии рандомно пропадали при простое сессии больше 24 (как выяснилось позже) минут.

Вот, что рассказал мне мануал:
Просроченные сессии на самом деле не подвергаются уничтожению сразу же по истечении 24 минут. Вот как все происходит: в начале каждого запроса, использующего сессию (вследствие предварительного вызова функции session_start( ) или установки session/auto_start в on), существует 1% возможности того, что PHP-интерпретатор отсканирует все сессии на сервере и удалит любую из просроченных. «1% возможности» в отношении компьютерной программы звучит совершенно непредсказуемо. Так оно и есть. Но подобная непредсказуемость повышает общую производительность. Интенсивно работающий сайт, занятый в начале исполнения каждого запроса поиском просроченных сессий в целях их удаления, станет расходовать слишком много ресурсов сервера.

Это объясняет «рандомность» удаляемых данных.
Но как решить эту проблему, поскольку в моем проекте время простоя запросто может быть больше 24 минут.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Views 1.6K
Comments 6

Недокументированная возможность в WebSphere Portal 5.1 (общая сессия для портлета и сервлета)

Java *

Была следующая задача:

написать портлет, который отображает график отчета, хранящегося в Когносе. Отчет Когноса может строиться очень и очень долго, от нескольких секунд до 20.
Заставлять ждать пользователя столько времени — ужасное решение.
Что же делать?
Total votes 2: ↑2 and ↓0 +2
Views 1.2K
Comments 5

Особенности хранения сессий PHP в memcached

PHP *
Данная статья рассматривает одну из проблем хранения PHP-сессий в memcached: отсутствие их блокировки.

Введение

Ни для кого не секрет, что одним из самых популярных способов повышения производительности сайта является использование memcached. Об этом неоднократно говорили и приводили многочисленные примеры. Самый простой способ сделать это — использовать memcached для хранения сессий PHP. Для этого нет необходимости переписывать весь код, достаточно нескольких простых действий. Я не буду рассказывать, почему надо хранить сессии в memcached. Я расскажу о том, почему хранение сессий в memcached опасно.
Читать дальше →
Total votes 75: ↑66 and ↓9 +57
Views 31K
Comments 75

Действительно умные сессии и авторизация

PHP *
Добрый день. Увидев статейку на тему «умных сессий», я решил поделиться действительно умной схемой, которая по всем параметрам превосходит предложенную.

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

Читать дальше →
Total votes 37: ↑23 and ↓14 +9
Views 11K
Comments 29

Codeigniter — выносим сессии в Memcached

Lumber room
Доброго времени суток, хабросообщество!

Когда дело доходит до оптимизации веб-приложения — то борьба идет за каждый запрос.
Поэтому наконец-то дошли руки оптимизировать и работу с сессиями. Раньше все хранилось в базе:

$config['sess_use_database'] = TRUE;

Настройки сессий можно назвать стандартными, за исключением названия таблицы.

После неоднократного просмотра профайлера, было решено вынести всю работы с сессиями в Memcached.
Зачем? Да хотя бы для того, чтобы избавится от лишних апдейтов и селектов при генерации страницы.

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views 819
Comments 4

Написание своего Session Store Provider ASP.NET использующего Redis

.NET *
Приветствую,

В этой статье я бы хотел поделиться опытом написания собственного Session Store Provider'a с использованием Redis в качестве хранилища.

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

Так же, для тех кто хочет попробовать результат в деле, я дам ссылку на исходники.
Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Views 5K
Comments 28

Отличия в адаптации сайта и AJAX веб-приложения для iOS

Website development *JavaScript *Development for iOS *
Есть сейчас такая тенденция — делать в сайтах поддержку планшетов iPad и других устройств на iOS: iPhone, iPod. Но если для сайтов это достаточно просто, при хорошей верстке, можно добавить пару тегов в head и готово, то для веб-приложений, где есть сессии с использованием Cookies, все обстоит сложнее и есть подводные камни. Итак, возможно, еще не все знают, что в мобильном Safari можно нажать кнопку меню (со стрелкой, как на рисунке) и выбрать там «Добавить в Домой» / «Add to Home Screen», тогда для сайта появится иконка на рабочем столе. Но иконка будет просто запускать Safari с этим сайтом, а вот если добавить пару известных тегов (см. ниже), то все элементы управления Safar будут скрыты и приложение будет работать на полный экран, как обычные нативные приложения iOS. Так вот основная выявленная проблема в том, что в этом режиме сессия все время сбрасывается. Стоит переключится на другое приложение или рабочий стол, даже просто перейти по ссылке, и опять вернуться в веб-приложение, как страница перегрузится и сессионной Cookie уже не будет, нужно логиниться заново. Эту проблему то мы и решим.
Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Views 13K
Comments 29

Доступны видео Android-сессий конференции Google I/O 2012

Development for Android *
Google выложил в открытый доступ на YouTube 29 видео выступлений спикеров с последней конференции Google I/O, которые посвящёны разработке под Android. Конечно, там есть видео о том, что прекрасно анонсировалось ранее — вроде «What's new in Android?» — зато три другие канала:



с длинными — по пятьдесят минут — видео из первых рук выглядят крайне ценными.
Total votes 15: ↑11 and ↓4 +7
Views 1.5K
Comments 0

Сессии в API на Yii c возможностью хранения в Redis

MobiDev corporate blog Yii *API *
Не так давно у меня возникла необходимость написать API на Yii Framework, одним из функциональных требований в котором является авторизация. Для механизма авторизации я решил использовать сессии.
Читать дальше →
Total votes 17: ↑13 and ↓4 +9
Views 19K
Comments 8

Как заставить сайт работать в виде Web App (никому не интересный пример частного решения, к тому же плохо описанный)

Website development *JavaScript *Development for iOS *
Наверное, это — своего рода продолжение темы «Отличия в адаптации сайта и AJAX веб-приложения для iOS» и развитие идеи из моего комментария там.

Тема старая, но для многих до сих пор актуальная. В целом, внутри будет много частностей, поскольку целью не является придумать универсальное решение, а всего лишь надо заставить один конкретный сайт работать как Web App, не прибегая к большим модификациям. В общем, как обычно, кому интересно — под кат, остальные проходят мимо, наверное.
Читать дальше →
Total votes 18: ↑8 and ↓10 -2
Views 4.3K
Comments 0

Magento 2: cookies, registry, session

Development for e-commerce *
Tutorial

Иногда при обработке запросов в web-приложениях возникает необходимость в кратковременном сохранении промежуточной информации. Для записи информации в браузер клиента используется механизм cookies, для сохранения данных в пределах одного запроса — реестр, для сохранения данных между запросами — сессии. Под катом — примеры для Magento 2.

Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views 7.7K
Comments 4

Хранение php-сессий в Redis с блокировками

PHP *
Sandbox
Стандартный механизм хранения данных пользовательских сессий в php — хранение в файлах. Однако при работе приложения на нескольких серверах для балансировки нагрузки, возникает необходимость хранить данные сессий в хранилище, доступном каждому серверу приложения. В этом случае для хранения сессий хорошо подходит Redis.

Наиболее популярное решение — расширение phpredis. Достаточно установить расширение и настроить php.ini и сессии будут автоматически сохраняться в Redis без изменения кода приложений.

Однако такое решение имеет недостаток — отсутствие блокировки сессии.
Читать дальше →
Total votes 28: ↑20 and ↓8 +12
Views 26K
Comments 10

PHP: Хранение сессий в защищённых куках

Website development *Cryptography *PHP *Symfony *
На некоторой стадии развития веб-проекта возникает одна из следующих ситуаций:

  • backend перестаёт помещаться на одном сервере и требуется хранилище сессий, общее для всех backend-серверов
  • по различным причинам перестаёт устраивать скорость работы встроенных файловых сессий

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

Однако, есть альтернатива этому подходу. Возможно безопасно и надёжно хранить данные сессии в браузерной куке у самого пользователя, если заверить данные сессии криптографической подписью. Если вдобавок к этому данные ещё и зашифровать, то тогда содержимое сессии не будет доступно пользователю. Главное достоинство этого способа хранения в том, что он не требует централизованной базы данных для сессий со всеми вытекающими из этого плюсами в виде надёжности, скорости и масштабирования.
Читать дальше →
Total votes 43: ↑37 and ↓6 +31
Views 24K
Comments 107

RequestQueueLimitPerSession и его распространение на старые версии .net

.NET *IIS *C# *
Sandbox
Доброго времени суток! В этой статье хотел бы поделиться решением неожиданной проблемы, возникшей в одном из проектов, над которым я сейчас работаю.

Что может быть опасного в обновлении .net 4.6.1 до .net 4.6.2? Я считал что для процесса обновления минорной версией достаточно прочитать release notes, чтобы избежать серьезных проблем. Однако, как выяснилось, Microsoft может привнести очень интересные и занимательные изменения в обход release notes, которые смогут вас занять в «скучные летние вечера и выходные дни».

Под катом будет описание одной проблемы возникшей из-за обновления и пути её решения, а так же немного исходников .net.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 4.4K
Comments 4

Подключение к session в Java и Python. HttpURLConnection и CookieManager (Java). Requests(Python)

Python *Java *
Tutorial
Допустим, что нам надо подключиться к серверу, авторизоваться и поддерживать сессию. В браузере это выглядит следующим образом:

  1. На адрес http://localhost:8080/login отправляется пустой GET запрос.
  2. Сервер присылает формочку для заполнения логина и пароля, а также присылает Cookie вида «JSESSIONID=094BC0A489335CF8EE58C8E7846FE49B».
  3. Заполнив логин и пароль, на сервер отправляется POST запрос с полученной ранее Cookie, со строкой в выходном потоке «username=Fox&password=123». В Headers дополнительно указывается «Content-Type: application/x-www-form-urlencoded».
  4. В ответ сервер нам присылает новую cookie c новым «JSESSIONID=». Сразу же происходит переадресация на http://localhost:8080/ путём GET запроса с новой Cookie.
  5. Далее можно спокойно использовать остальное API сервера, передавая последнее Cookie в каждом запросе.

Рассмотрим, как это можно реализовать на Java и на Python.


Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Views 8K
Comments 8

Dependency Injection и Full state сервер

Timeweb Cloud corporate blog .NET *ASP *C# *


Сразу же сообщу, что в данной публикации не сравниваются Fullstate и Stateless парадигмы построения серверов. Также отсутствует какая-либо агитация в пользу Fullstate. Мы исходим из ситуации, в которой мы приняли решение, что для конкретного проекта сервер ASP.NET должен между запросами не только хранить какие-то статические данные, но и возможно выполнять какую-то полезную работу.
При этом мы, разумеется, хотим использовать всю мощь DI-контейнера .NET!

Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Views 3.3K
Comments 27