Есть несколько похожих вопросов в Stack Overflow, но никто не дает мне понять, как справиться с моей проблемой.Сохранять идентификатор сеанса после входа в систему CakePHP
Я переношу свое приложение с CakePHP 1.3 на 2.x, и у меня есть проблема с тележкой. Мои пользователи могут добавлять товары в корзину, пока не регистрируются, и я объединять элементы своей корзины после входа в систему. В 1.3 это работает хорошо, потому что идентификатор сеанса не был изменен после входа в систему, но теперь эта функция нарушена, потому что идентификатор сеанса изменяется после входа пользователя в систему.
Есть ли способ оставить старый идентификатор сеанса после входа в систему или мне нужно что-то написать? Если да, то что может быть «лучшей практикой» здесь?
В настоящее время я сохранить в БД тележках для authentificated пользователей с их user_id
и для анонимных пользователей с их session_id
и после входа в систему, я просто найти телегу user_id
и session_id
, объединить элементы и чем удалить корзину с session_id
, но теперь это невозможно сделать, потому что от session_id
изменение.
Вы можете просто сохранить информацию о загрузке для не прошедших проверку пользователей в сеансе, и вы не потеряете ее после входа в систему. – ADmad
Спасибо, это было для меня неожиданностью. Я не проверял этот случай из-за изменения 'session_id', поэтому считаю, что данные сеанса также были потеряны. Но теперь я просто сохраняю анонимный 'session_id' в' Session' в AppController и каждый раз проверяю, был ли он установлен, и пользователь аутентифицирован. Я делаю элементы слияния корзины с этим 'session_id' вместо текущего. Хотя принятый ответ правильный, я не могу использовать этот подход, потому что в моем приложении более одного метода входа в систему. – Yaroslav
Компонент Auth восстанавливает идентификатор сеанса после входа в систему из соображений безопасности. Данные сеанса сохраняются, когда PHP восстанавливает новый идентификатор сеанса. Единственная причина, по которой у вас возникают проблемы, заключается в использовании устаревшего идентификатора сеанса. Я не вижу большой пользы в сохранении корзины не прошедших проверку пользователей в базе данных. Держите его в сеансе, а затем сохраняйте db после входа в систему. – ADmad