shornikov
Новичок
Как правильнее реализовать "запомнить меня"
Добрый день.
Хочется сделать "запомнить меня", чтобы пользователь не в водил пароль при каждом открытии сайта. И более того, все настройки хранившиеся в сессии - были востановлены.
Логичный, как мне кажется, способ - переносим сессии в базу данных с помощью session_set_save_handler.
создаем таблицу InnoDB из sid, userdata, timestamp.
Сессии работают и хранятся.
Это практика.
Пытаемся решить проблему с "запомнить меня".
Теория.
Добавляем поле remember в таблицу с сессиями.
Если пользователь ставит галочку запомнить, в это поле пишется уникальное значение, а у пользователя создается кука с этим значением.
Пользовательские функции обновления сессий переписываются, чтобы в отчистку мусора преждевременно не попали поля с заполненным полем remember.
При входе на сайт - идет запрос из таблицы сессий по значению куки, и сессия востанавливается.
Пробема.
Последовательное выполнение кода из серии (код не боевой*):
не приводит к обновлению записи. Ошибок не выдает.
Есть мнение что запись в момент обновления блокирована.
Пробовал перед записью поля remember закрывать сессию c помощью session_write_close(), тогда запись проходит, но последующий session_start() ругается на невозможнось инициализировать хранилище*.
Возможно, надо хранить remember и копию сессионых данных в отдельной таблице - но это приводит к лишним телодвижениям. при каждом обновлении сесии надо дополнительно вызывать синхронизацию, что не интересно.
Теперь вопросы:
а) можно ли побороть блокировку записи, если дело в ней.
б) я вообще верной дорогой иду?
* К сожалению, рабочий код дома, а я на работе. Если кто-нибудь захочет посмотреть код, выложу вечером. Голова забита данной проблемой, терпеть до вечера сил нет. Извините.
Добрый день.
Хочется сделать "запомнить меня", чтобы пользователь не в водил пароль при каждом открытии сайта. И более того, все настройки хранившиеся в сессии - были востановлены.
Логичный, как мне кажется, способ - переносим сессии в базу данных с помощью session_set_save_handler.
создаем таблицу InnoDB из sid, userdata, timestamp.
Сессии работают и хранятся.
Это практика.
Пытаемся решить проблему с "запомнить меня".
Теория.
Добавляем поле remember в таблицу с сессиями.
Если пользователь ставит галочку запомнить, в это поле пишется уникальное значение, а у пользователя создается кука с этим значением.
Пользовательские функции обновления сессий переписываются, чтобы в отчистку мусора преждевременно не попали поля с заполненным полем remember.
При входе на сайт - идет запрос из таблицы сессий по значению куки, и сессия востанавливается.
Пробема.
Последовательное выполнение кода из серии (код не боевой*):
PHP:
$_SESSION['user']="bla-bla";
mysql_query("update session set remember='Уникальное значение' where siв=".session_id());
Есть мнение что запись в момент обновления блокирована.
Пробовал перед записью поля remember закрывать сессию c помощью session_write_close(), тогда запись проходит, но последующий session_start() ругается на невозможнось инициализировать хранилище*.
Возможно, надо хранить remember и копию сессионых данных в отдельной таблице - но это приводит к лишним телодвижениям. при каждом обновлении сесии надо дополнительно вызывать синхронизацию, что не интересно.
Теперь вопросы:
а) можно ли побороть блокировку записи, если дело в ней.
б) я вообще верной дорогой иду?
* К сожалению, рабочий код дома, а я на работе. Если кто-нибудь захочет посмотреть код, выложу вечером. Голова забита данной проблемой, терпеть до вечера сил нет. Извините.
База не файл, но видимо тоже лочится.