Странное поведение СЕССИИ .. Теперь вы видите это, Теперь вы не видите - PullRequest
0 голосов
/ 04 мая 2011

Когда я добавляю что-то в корзину, сеанс можно увидеть сразу после этого. Однажды я перенаправлен в корзину просмотра. Сессия прошла.

Что странно, но если я снова добавлю что-то в корзину, она обновит правильное количество ... так что, очевидно, она все еще там.

Я не понимаю.

Я использую CakePHP 1.3. У меня есть контроллер под названием CartsController с 2 представлениями add и index. В представлении add ожидается добавление параметра id в корзину. Поэтому, когда вы переходите к carts/add/1, он добавляет идентификатор продукта 1 в корзину ($ _SESSION), а затем перенаправляет вас в представление индекса (/carts).

Если вы просматриваете SESSION сразу после его добавления в функцию add () перед перенаправлением в представление индекса, в нем есть правильные значения. К тому времени, когда вы достигнете представления индекса, сеанс снова станет пустым (ну, у него есть значение Cake Config по умолчанию, но я ничего не добавил).

Это привело бы вас к мысли, что где-то посередине, когда он добавляется, и после того, как он перенаправляется, сеанс уничтожается. Но это не так, потому что если вы снова добавили товар в корзину и снова просмотрите его сразу после этого, он будет показывать большее количество (теперь 2 вместо 1, затем 3, затем 4 и т. Д.). Однако, если вы просматриваете сеанс где-то еще, его там нет.

Кто-нибудь вообще знает, что здесь может происходить?


Обновление

Я хотел бы добавить, он работает как задумано, когда вы в первый раз добавляете что-то в корзину в своем браузере, но если вы покинете сайт (по внешней ссылке) с чем-то в вашей корзине и вернетесь, ничего не произойдет в Ваша корзина, и ничто не может быть добавлено снова - тогда начнутся проблемы, описанные выше. Это происходит в Chrome, FF, IE.

Update2

Если вы хотите сами убедиться, шаги по воспроизведению

  1. Перейти к http://216.119.150.158/john/products/1/simon-g-ring
  2. Нажмите, чтобы добавить в корзину
  3. Нажмите кнопку Google Checkout
  4. Нажмите на ссылку Изменить заказ , чтобы вернуться предыдущая страница (не кнопка возврата)

Ваша корзина пуста, и вы ничего не можете добавить в корзину снова

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

При первом создании файла cookie для HTTP-соединения, когда вы возвращаетесь, появляется второй файл cookie для HTTPS-соединения, который отправляется только обратно на HTTPS-соединения. Если вы хотите получить доступ к странице с одним и тем же протоколлом (как по времени HTTP, так и по времени HTTPS), вы должны увидеть свою корзину.

Передача файла cookie сеанса один раз небезопасно и один раз безопасно может привести к проблемам с безопасностью. Я написал статью о переключении между протоколами HTTP и HTTPS:

Переключение между страницами HTTP и HTTPS с безопасным cookie-файлом сеанса

но, возможно, легче всегда подключаться через безопасное соединение HTTPS.

0 голосов
/ 04 мая 2011

Скорее всего, вам нужно вызвать session_start() (или какой-либо другой функцией-оберткой CakePHP) на странице корзины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...