Какой код состояния http должен использоваться, чтобы сообщить клиенту, что сеанс истек?


на веб-странице он использует диспетчер соединений YUI / источник данных для отправки запросов AJAX на сервер, если сеанс (который содержит информацию о том, был ли пользователь аутентифицирован) уже истек, те ответы ajax, которые могут быть просмотрены только аутентифицированными пользователями, должны возвращать код состояния http, сообщая клиенту, что сеанс уже истек, тогда клиент либо просто перенаправляет его на страницу входа в систему, либо спрашивает его, хочет ли он продлить сессия.

мой вопрос заключается в том, что в этой ситуации какой код состояния http является наиболее подходящим, чтобы сообщить клиенту, что сеанс истек?

список кодов состояния HTTP из wiki

8 64

8 ответов:

лучшее, что я могу предложить, это код состояния HTTP 401 с заголовком WWW-Authenticate.

проблема с 403 просит является RFC 2616 государства "авторизация не поможет, и запрос не должен повторяться."(т. е. не имеет значения, аутентифицированы вы или нет, вы никогда не получите доступ к этому ресурсу).

проблема с 401 запросы это говорит, что они " должны включать заголовок WWW-Authenticate поле." Как кто-то отметил похоже, что использование пользовательского значения в заголовке WWW-Authenticate не нарушает спецификацию.

Я не вижу смысла RFC 2617 почему состояние HTTP 401 в сочетании с пользовательским заголовком WWW-Authenticate, как это не было бы хорошо:

WWW-Authenticate: MyAuthScheme realm="http://example.com"

The спецификации OAuth на самом деле, кажется, сделать именно это, как они рекомендуют это (хотя они имеют на мой взгляд странную интерпретацию RFC):

WWW-Authenticate: OAuth realm="http://server.example.com/"

это, кажется, специально не санкционировано RFC, но я на самом деле не вижу, что это запрещено им (похоже, это не противоречит никакому обязательству или не должно, должно или не должно быть условием).

Я хотел бы, чтобы был более конкретный код состояния HTTP для тайм-аутов и для таких вещей, как токены CSRF, которые недействительны, поэтому это было яснее.

Я бы рекомендовал HTTP 401.

в то время как 403 в основном говорит: "вам не разрешено, уходите и не возвращайтесь", 401 говорит: "Мы не знаем, разрешено ли вам или нет, потому что вы не принесли свой идентификатор. Иди и попробуй еще раз."

сравнить Википедии определения:

HTTP 403 - запрос был официальный запрос, но сервер отказывается отвечать на него.

HTTP 401 - Аналогично 403 запрещено, но специально для использования, когда аутентификация возможна, но не удалась или еще не была предоставлена.

насчет 419 - это не стандарт, но описание в Википедии Кажется, подходит:

419 Тайм-Аут Аутентификации

не является частью стандарта HTTP, тайм-аут аутентификации 419 обозначает срок действия этой ранее действительной проверки подлинности истек. Он используется в качестве альтернатива 401 несанкционированный для того чтобы продифференцировать от в противном случае аутентифицированным клиентам будет отказано в доступе к определенному серверу ресурсы.

Я считаю, что соответствующий код будет 403 / запрещено. Нет никаких, которые непосредственно связаны с сессиями.

правда, нет стандартного кода состояния HTTP для таймаута сеанса. Сеансы реализуются на уровне приложений, а не на транспортном уровне HTTP.

существует пользовательский код состояния, который Microsoft использует для тайм-аута сеанса: 599, или просто создайте свой собственный код состояния в диапазоне 5xx.

из кодов состояния Вики:

599 ошибка таймаута подключения к сети (неизвестно) Этот код состояния не указан ни в одном RFC, но используется Прокси-серверы HTTP корпорации Майкрософт для передачи сигнала о таймауте сетевого подключения за прокси-сервером клиенту перед прокси-сервером.

Я использую пользовательский код состояния 599 для таймаута сеанса, а затем проверяю его в ответе AJAX.

согласно ссылке Википедии Коды Состояния Http предоставлено выше Бобо:

440 Login Timeout (Microsoft)

    A Microsoft extension. Indicates that your session has expired.

Как вы разместите ссылку, в этой ссылке я нашел этот код состояния HTTP 440. вы можете использовать код состояния 440 HTTP для истекшего сеанса.

440 время ожидания входа

 The client's session has expired and must log in again.

401 несанкционированный мы можем использовать, когда учетные данные для входа пользователя неверны. или маркер аутентификации, переданный в заголовке, недопустим.

403 запрещено мы можем использовать это, когда пользователь не имеет специального разрешения на запрашиваемый ресурс.

поэтому, на мой взгляд, мы должны использовать 440 время ожидания входа.

технически, принятый ответ верен: если вы уже точно знаете, что вы собираетесь не выполнить запрос, и вы спрашиваете, какой код отказа вернуть, то HTTP 401 "несанкционированный (неавторизованный)" является подходящим, чтобы запросить повторную аутентификацию.

но прежде всего, спросите себя: Если вы не выполните просьбу?

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

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