Не важно на чем Вы пишите и как (PHP, rest/не-rest и т.д.): схема - везде одна.
Про сессию:
1. Сервер создаёт идентификатор сессии и всегда указывает его при ответе на каждый запрос клиента.
2. Клиент использует этот идентификатор (обычно хранит в куках браузера) при каждом последующем запросе.
3. Если сервер в ответе указал НОВЫЙ идентификатор сессии, клиент - должен использовать новый.
Про токен:
Токен объединяет в себе авторизацию и сессию с помощью операции хэширования.
1. После получения идентификатора сессии от сервера, клиент отправляет хешированную информацию на основе логина, пароля и полученного идентификатора.
2. Сервер проверяет и, если всё верно, выдаёт токен для последующих запросов.
3. Для защиты от восстановления формулы хэширования на основе одинаковых данных, используется полиморфизм: добавляется параметр random и timestamp к передаваемым параметрам.
4. Для защиты уникальности - на стороне сервера предусматривается суточное хранение всех запросов на основе токена.
Токен может быть как постоянным, так и одноразовым.
1. Постоянный - когда при каждом запросе к серверу он не меняется.
2. Одноразовый - когда после каждого запроса к серверу, сервер выдаёт новый токен.