2012-06-20 5 views
5

Я создал приложение в CakePHP, которое позволяет пользователю входить в систему и делать что-то вроде этого, он заставляет пользователя войти в систему в течение примерно 24 часов, я думаю, по умолчанию. И это обрабатывается сеансом/cookie, так как cookie также создается ...Как помнить меня отличается от тайм-аута сеанса

1.) Так что бы вспомнить, что я привел на вечеринку? Поскольку все, что было бы сделано, это создать ДРУГОЙ cookie, который устанавливает тайм-аут и задерживает пользователя во вход ... Но эта функциональность существует в каждом приложении по умолчанию с правом сеанса? Но я видел много сайтов, которые делают это, но я не понимаю, почему, поскольку сессия делает это из коробки:/

2.) Также, как заканчиваются сеансы, даже если пользователь продолжает использовать веб-сайт ? например если я установил его на 1 минуту, но обновляюсь каждые 30 секунд, он все равно истечет ... но я сохранил сайт активным до того, как он истечет, и как он все еще может истечь? Это раздражает, так как у меня есть срок действия приложения 1 час, но даже когда клиент использует сайт, он истекает через 1 час независимо от активности.

Было бы здорово, если бы кто-то мог ответить на эти 2 вопроса.

ОБНОВЛЕНИЕ: Я создал щедрость на этом, чтобы получить эксперта CakePHP, чтобы помочь исправить эту проблему. Проблема заключается в том, что сеансы истекают после тайм-аута REGARDLESS взаимодействия с пользователем. То, что я хочу сделать, это сказать, что у меня сеанс длится 5 минут, и пользователь вызывает обратную передачу каждые 30 секунд, после чего сеанс будет продолжаться через 5 минут. Это не так в данный момент ...

Configure::write('Session', array(
     'start' => true, 
     'defaults' => 'php', 
     'timeout' => 1, 
     'cookieTimeout' => 1, 
     'autoRegenerate' => true 
    )); 
+1

Можете ли вы включить конфигурацию сеанса? Здесь есть много вещей, и это хорошая отправная точка. –

+0

Добавил конфигурацию и установил, чтобы время было очень низким, поэтому я могу проверить теорию! – Cameron

+0

Как только вы поймете разницу, заметив, что Zend Framework использует куки-файл сеанса для реализации, помните меня - видимо, им нужно настраиваться на такие потоки! – quickshiftin

ответ

8
  1. Что это принесло бы, что если пользователь закрывает браузер и перезапускает его, он все равно войти автоматически. Это не относится к cookie сеанса, поскольку такой файл cookie удаляется, как только браузер закрывается.

  2. Возможно, страница, в которую вы отправили каждые 30 секунд, не начинала сеанс. В этом случае механизм сеанса не используется, и дата истечения сеанса не сбрасывается до now + 1 minute. Или, может быть, обновление только попадает в кеш браузера, а не на сервер.

+0

1.) Когда вы говорите закрыть браузер, вы имеете в виду фактически выйти из приложения, как при закрытии окна, а затем снова посетить веб-сайт, который я все еще зарегистрировал.) Как это исправить? Я использую CakePHP и до тех пор, пока пользователь использует сайт, например. загружая страницу и т. д., тогда сеанс не должен истекать, если неактивен в течение 1 часа. – Cameron

+0

1) Нет, я имею в виду «закрыть браузер», т. Е. Закрыть все окна браузера. 2) обязательно вызовите session_start() на каждой странице приложения, даже если сеанс не используется этой страницей. –

+0

Как насчет мира CakePHP? У меня создалось впечатление, что сеансы существуют в приложении? – Cameron

0

1.) Разница между сессионным cookie и «помнить меня» заключается в том, что файл cookie сеанса имеет дату истечения срока действия «0». Это означает, что «истекает, когда браузер закрывается». Принимая во внимание, что «запомнить меня» дает конкретную дату истечения срока действия, скажем, через месяц, в тот же самый cookie сеанса. Это единственное различие. Вы можете подумать, что это различие в функциональности тривиально или бессмысленно, но подумайте об этом: дома я не хочу беспокоиться о регистрации в каждый вечер к тому же черту Yahoo! а на работе я не хочу беспокоиться о том, чтобы удалять файлы cookie каждый раз, когда я должен идти, мочиться.

2.) Печенье сеанса не должно истекать даже в том случае, если приложение используется. Где и при каких обстоятельствах вы видите это поведение? Это неверно.

+0

Я вижу это поведение повсюду в приложении. Сеанс истекает после таймаута, хотя я просматриваю страницы и т. Д. – Cameron

1

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

Рядом с этим тестом с внутренним хранилищем сеансов торта. Таким образом, локальная конфигурация системы не может влиять на нее. Возможно, PHP-настройки переопределяют настройки в Cake. Поэтому установите хранилище сеансов в Cake. Это создаст каталог с сеансами, которые вы можете контролировать.

Аналогичным образом это комбинация параметров сервера и ожидание того, что конфигурация Cake переопределит эти параметры сервера.

8

Хорошо, давайте посмотрим, если я могу захватить некоторые из этих щедрот (попой?), А также тестирование моих объяснительных навыков :)

Итак, давайте начнем с # 1.

И что бы вспомнить, что я привел на вечеринку?

Здесь важно различить разницу между «cookie cookie сеанса» и «запомнить куки-файл».

Поскольку HTTP - это stateless protocol, cookie сеанса используется для привязки нескольких запросов к одному пользователю. Без этого каждый запрос на ваш веб-сервер полностью не связан с каждым другим запросом. Представляете ли вы писать приложения без сеансов? Каждый запрос полностью пуст, нет логинов, нет переменных сеанса. Каждый запрос неизвестный пользователь! Это в основном означает нет веб-приложений!

Теперь важно знать, что вы абсолютно не хотите вашей сессии до последних 24 часов! В моей книге это очень большой нет-нет. Чем короче ваша сессия, тем она безопаснее (по крайней мере теоретически). Зачем? Потому что session can be hijacked! Чем дольше ваш сеанс вокруг, тем больше шансов его захватить.

Например, представьте себе банковское приложение. Кроме того, представьте, что ваш пользователь обращается к нему на общедоступном ПК (наш пользователь не самый яркий). Поэтому он управляет своим аккаунтом или что-то в этом роде, и его телефон звонит. Будучи идиотом, он берет вызов и уходит, не выходя из дома. Вы хотите, чтобы ваша сессия закончилась через 5 минут, 15 минут или 24 часа? Не знаю о вас, но для чего-то такого же важного, как онлайн-банкинг, я хочу, чтобы этот сеанс прошел как можно скорее.

Переходя к части «запомнить меня».

Итак, cookie сеанса «связывает» несколько запросов за один сеанс, что делает «помнить меня»? Простыми словами: он связывает несколько сеансов одному пользователю.

Вы хотите, чтобы ваш сайт был легким и приятным в использовании, а вход в систему почти никогда не бывает приятным. Это всего лишь раздражающая вещь, которую вы должны делать каждый раз, прежде чем делать то, что вы действительно хотите сделать. Помните, что печенье снимает эту досаду.

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

И, наконец, есть одно существенное различие между сессионным файлом cookie и файлом cookie, который я помню: expiration. Файлы сеансов cookie обычно заканчиваются при закрытии браузера (или через определенное время, указанное вами явно), тогда как помните, что файлы cookie обычно длятся дольше.

Также как заканчиваются сеансы, даже если пользователь продолжает использовать сайт ?

Чтобы сделать это простым, они не. Вы, должно быть, изменили способ обработки тортов (или вашего приложения) сеансов. Ответ должен быть где-то в вашем коде. Причина, по которой вы не получили удовлетворительного ответа, состоит в том, что мы не можем видеть ваш код. Вам просто нужно отлаживать и отслеживать, что происходит с вашими файлами cookie. JB Nizet дал вам несколько предложений.

Одна вещь, которую я знаю, которая может вызвать проблемы на некоторых серверах, - уровень безопасности тортов. Попробуйте уменьшить его в вашем /Config/core.php:

Configure::write('Security.level', 'medium'); // or 'low' 

Если это не помогает, то ответ, безусловно, в вашем коде. Надеюсь, этот ответ подтолкнет вас в правильном направлении!

0

Если я это сделать:

Configure::write('Session', array(
     'start' => true, 
     'defaults' => 'cake', 
     'timeout' => 1, 
     'cookieTimeout' => 1, 
     'autoRegenerate' => true 
    )); 

/** 
* The level of CakePHP security. 
*/ 
    Configure::write('Security.level', 'high'); 

Это устраняет проблему! Таким образом, сеанс длится 10 секунд, но если я обновляюсь каждые 2-3 секунды, я все равно войду в систему через 10 секунд после обновления файла cookie. Таким образом, кажется, что настройки PHP моей среды размещения/вызывают истекающий сеанс/cookie ... Почему это произойдет?

+0

Из-за того, что я написал в своем ответе, вы изменили хранилище файлов cookie. Это останавливает влияние настроек PHP и сервера на сеансы. –

+0

Не знаете, кто положил мой ответ? Также заметил, что '' autoRegenerate '=> true' заставляет его сломаться, поэтому пришлось удалить и это! – Cameron

+0

Есть несколько ошибок в cakephp 2.1, восстанавливающих эту тему. У меня такая же проблема с функцией автоматического обновления, которая использует ajax. Это также должно держать сессию в живых, и это не так. Очень надоедливый. Я должен оглянуться на работу, которую я сделал по этому вопросу. Если вы посмотрите на локальное и главное значение параметров сеанса в phpinfo(), вы увидите некоторые несоответствия с настройками cakephp. Это затрудняет отладку, и решение включает модификацию исходного кода cakephp. Который я не рекомендую делать, потому что очевидные проблемы с обновлениями позже. – Jeroen

Смежные вопросы