Nie dostaję interfejsu API sieci web i sesji.
Stworzyłem projekt interfejsu API asp.net i zintegrowałem w nim angularjs. Za każdym razem zadzwonię do interfejsu web API.
Przeczytałem artykuły, które stwierdzają, że nie jest dobrze korzystać z sesji w interfejsie WWW. Rozumiem, że interfejs API jest podejściem bezstanowym. Zgadzam się. ale istnieje sposób na użycie sesji.
Pierwsze pytanie: Jeśli po zalogowaniu chcę wyświetlać nazwę użytkownika na każdej stronie, co powinienem zrobić z interfejsem API?
drugie pytanie: mówią, że nie używaj sesji w webapi. jaki jest inny sposób / podejście do bezpiecznego przechowywania informacji o kliencie.
Jeśli używam lokalnej pamięci HTML5, można ją edytować. Jeśli używany jest plik cookie, można go usunąć.
Co i jak mam to zrobić dla użytkownika, dopóki aplikacja nie będzie w trybie działania?
Odpowiedzi:
2 dla odpowiedzi № 1Tutaj semantyka często przesłania dyskusję. Ludzie mylą obiekt sesji z bezpaństwowością. I często mówią: „nie używaj sesji, ponieważ nie jest ona„ bezstanowa! ”.
Jednak naprawdę oznaczają, że powinieneś starać się, aby twoje spokojne wezwania były idempotentne, co oznacza, że nie zmieniają swojego zachowania w zależności od tego, co robisz w tle.
Sesja, pamięć podręczna środowiska wykonawczego lub cokolwiek to jestużywasz do buforowania danych, nie ma to wpływu na twój projekt bezstanowy, bo tak naprawdę, co dalej? Twoja baza danych też jest pełna? I nie powinieneś czytać danych z tego? Bzdury oczywiście; twoja podstawowa pamięć, jeśli jest w pamięci lub na dysku, nie ma wpływu na stan twojego klienta.
Chociaż uważam, że @MajoB przedstawia inne ważne punktyo nieużywaniu obiektu sesji, naprawdę nie ma nic złego w użyciu pamięci podręcznej w interfejsie WWW, sesji lub czymś innym. Ale nigdy nie pozwól, aby fakt, że coś jest w sesji IN, zwraca inny wynik niż wtedy, gdy coś jest poza sesją.
1 dla odpowiedzi nr 2
Polecam unikanie asp.session, ponieważ może to powodować problemy z wydajnością i może wygasnąć w dowolnym momencie, niezależnie od stanu aplikacji, nie skaluje się w chmurze, zablokuje współbieżne żądania ajax). Lepszym rozwiązaniem byłoby użycie mechanizmu przechowywania HTML 5, zwłaszcza w połączeniu z AngularJs (możesz użyć ng-storage https://github.com/gsklee/ngStorage).
0 dla odpowiedzi № 3
Polecam używanie tożsamości asp.net i renderowanie informacji o użytkowniku na serwerze.