Сколько состояний я могу сохранить в переменных сеанса для веб-приложения? - PullRequest
2 голосов
/ 19 октября 2011

Я пишу API REST / RPC для создаваемого веб-приложения.Из того, что я узнал, кажется, что одна из основных идей REST - не поддерживать состояние.Тем не менее, я обнаруживаю, что занимаюсь чем-то вроде пометки сеанса как аутентифицированного на стороне сервера, и это похоже на сохранение состояния.Как далеко я должен пройти эту практику?Где мне провести черту?Есть и другие вещи, которые было бы действительно удобно сохранить как часть переменных сеанса, но мне интересно, как узнать, когда я не должен или не должен этого делать.

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

ОБНОВЛЕНИЕ:

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

1 Ответ

2 голосов
/ 19 октября 2011

Вы правы - REST-вызовы в идеале не сохраняют состояния, и сохранение чего-либо в переменной сеанса, а использование этого для REST-вызова - анафема. Например, вы не можете гарантировать, что клиент RESTful может даже отправлять информацию cookie, необходимую для переменных сеанса.

Если вам нужна аутентификация, тогда у вас должны быть вызовы REST, которые возвращают что-то вроде билета, тогда вызывающий REST отправит этот билет как часть другого вызова.

UPDATE Для системы тикетов вы обычно хотите использовать ту же аутентификацию или аналогичную аутентификационную систему. Например, если вам требуются имя пользователя и пароль, вы можете запросить запрос билета POST. Билет - это GUID, который передается при последующих вызовах. Билет на сервере может храниться в сеансе или в БД (обычно у меня есть таблица TICKETS с такими вещами, как даты истечения срока действия).

$result = file_get_contents('http://site.com?action=auth&user=matt&password=pass');
// parse $result XML for ticket or auth error
// subsequent calls...
$result = file_get_contents('http://site.com?action=getSomething&ticket=" . $ticket);

QuickBase работает следующим образом - вы отправляете действие API_Auth с именем пользователя, паролем и токеном приложения API и получаете взамен билет. Затем вы передаете свой токен приложения api и билет на последующие вызовы - и запросы GET, и отправку POST.

...