сеансы без печенья с ajax - PullRequest
2 голосов
/ 30 апреля 2010

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

Основными проблемами являются сеансы, управляемые файлами cookie:

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

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

0 голосов
/ 30 апреля 2010

Я думаю, что самый простой способ - это использовать в любом случае технологию сессии php, но без файлов cookie. Чтобы заархивировать этот результат, вам нужно всего несколько функций php, но вы должны отправлять еще одну переменную для каждого запроса 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-адрес.

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