2010-04-30 1 views
2

Я разрабатываю довольно «большое приложение» с PHP & kohana framework прошло 2 года, несколько успешно используя механизм аутентификации моей инфраструктуры. но за это время, и по мере того, как приложение выросло, многие проблемы, связанные с сохранением состояния, возникли.cookieless сеансы с ajax

основные проблемы, которые печений управляемые сессии:

  • не может использоваться для доступа к веб-службы (по крайней мере, это действительно не приятно делать так ..)
  • во многих случаях проблематичными Мобильный доступ
  • не разрешает одновременное использование нескольких одновременных приложений в одном браузере (может быть разрешено жестким обманом, но все же ..)
  • требует много конфигураций и беспорядок для работы на 100% вправо, и это без проблем -browser (отключенные файлы cookie, старые ошибки браузера & уязвимости и т.д.)

многие другие сессионные недостатки, указанные в этой старой теме: http://lists.nyphp.org/pipermail/talk/2006-December/020358.html

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

Решение, о котором я думал, не использует файлы cookie (для statefullness). вместо этого имитируя его, передав обратно &, проведите сеанс-токен через запросы ajax. Для обеспечения безопасности токен сеанса регенерируется по каждому запросу. Кроме того, отпечаток пальца (referrer, OS, clientVer) сохраняется при создании сеанса и проверяется при каждом запросе.

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

Я по-настоящему признателен за любые серьезные отзывы об этом методе и любые альтернативы.

  • также, любой совет о том, как сохранить состояние на странице обновления без cookies, было бы здорово :), но это небольшая техническая проблема.

  • Извините, если я пропустил какой-то подобный пост .. там есть миллиарды о сеансах.

Большое спасибо заранее (и для чтения, пока здесь!).

+0

В чем ваш вопрос? Или вы просто ищете обратную связь для своего алгоритма? Хороший вопрос, кстати, если немного длинный. –

+0

действительно длинный, извините :(. Im ищет решение (желательно чистое и простое) для недостатков cookie-сессии. вы можете увидеть мой метод в качестве предлагаемого решения, но с очень ограниченной гарантией. – user258626

ответ

0

Я думаю, что это самый простой способ использования технологии php-сессии, но без файлов cookie. Для архивирования этого результата вам нужно всего несколько php-функций, но вы должны отправить еще один var для каждого запроса GET.

session_start(); 
if(isset($_GET['SESSIONID'])) 
{ 
    session_id($_GET['SESSIONID']); 
} 
echo "<script>var SESSIONID = '".session_id()."';/script>"; 
//session_id() autogenerates a new hash for every new session but you can you the algorithm that you prefer. 

Хорошо, теперь в любом сценарии JS у вас есть идентификатор сессии, так что вам нужно только добавить к URL.

+0

Я не вижу отличий от добавления маркера к параметрам ajax-вызова. – user258626

+1

Основная проблема здесь не в том, что сервер-сессия-хранилище (есть сигналы решений), а в файлах cookie. И я рад, что вы со мной согласны не используя cookies вообще. – user258626

1

О сохранении токена сеанса на странице обновляется/непреднамеренно назад/рядом -> найдено отличное решение: http://www.sitepoint.com/javascript-session-variable-library/. Это кросс-браузер и позволяет несколько одновременных входов (с разных вкладок/окон).

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

  • Нет связанных вопросов^_^