Zapisywanie JWT jako cookie uznaje za zły pomysł. Lepiej użyć do tego local storage jeśli klientem jest przeglądarka.
Klient z każdym żądaniem do serwera powinien wysyłać taki token w nagłówku. Coś jak klucz API ale jawny bo możemy wyczytać z niego informacje po stronie klienta.
Sesja to stan.
JWT to rozwiązanie przeciwne, czyli bezstanowe.
Jest generalnie prostsze niż cookies i ma w sumie inne założenia, ale proponuję dobrze zapoznać się z filozofią - co, jak i dlaczego gdyż błędna implementacja tego sposobu nie jest bezpieczna (ale to można powiedzieć również o cookies).
W wielkim skrócie serwer tworzy dokument JSON w którym jest np. user_id, uprawnienia, data wydania a następnie taki dokument jest podpisywany kryptograficznie. Klient który otrzymuje taki token JWT może odczytać co w nim jest ale nie jest w stanie stworzyć wiarygodnego (takiego co serwer uzna za wystawiony przez niego samego) dokumentu samodzielnie gdyż nie zna ciągu znaków którym podpisywany jest dokument. Ten sekret jest używany do podpisywania każdego dokumentu, nie jest potrzebny osobny ciąg znaków dla każdego z użytkowników. Taki sekret należy trzymać w konfiguracji aplikacji i zmienić go w razie gdyby nastąpiło włamanie, wtedy wszystkie wydane tokeny stracą ważność.
Nie ma potrzeby trzymania niczego w bazie danych, na tym polega zaleta tego rozwiązania.
Wadą może być potrzeba zarządzania wygasaniem takich tokenów oraz przedłużanie ich ważności.
http://stackoverflow.com/questions/26739167/jwt-json-web-token-automatic-prolongation-of-expiration