Po wielu poszukiwaniach nie otrzymałem żadnych odpowiedzi iw końcu musiałem do ciebie wrócić. Poniżej wyjaśniam szczegółowo mój problem. To za długo, więc proszę, nie opuszczaj czytania. Wyjaśniłem mój problem w prostym języku.ASP.NET MVC RememberMe
Pracowałem nad projektem asp.net mvc. Używam standardowych ról ASP.NET i członkostwa. Wszystko działa dobrze, ale funkcja pamiętania mnie nie działa wcale. Wymieniam wszystkie szczegóły pracy. Mam nadzieję, że pomożesz mi rozwiązać ten problem.
I wystarczy to:
Potrzebuję użytkownika, aby zalogować się do aplikacji internetowej. Podczas logowania mogą się zalogować, pamiętając o mnie lub bez niego. Jeśli użytkownik loguje się z pamięcią, chcę, aby przeglądarka pamiętała je przez długi czas, powiedzmy co najmniej jeden rok lub znacznie dłuższy czas. Sposób, w jaki robią to na www.dotnetspider.com, www.codeproject.com, www.daniweb.com i wielu innych stronach. Jeśli użytkownik zaloguje się, nie pamiętając mnie, to przeglądarka powinna zezwolić na dostęp do strony internetowej przez około 20-30 minut, a potem ich sesja powinna wygasnąć. Ich sesja powinna również wygasnąć, gdy użytkownik zaloguje się i zamknie przeglądarkę bez wylogowania.
Uwaga: Z powodzeniem wdrożyłem powyższą funkcjonalność bez korzystania ze standardowych ról i członkostwa w asp.net, tworząc własne talby dla użytkownika i uwierzytelniając przy użyciu mojej tabeli bazy danych, ustawiając pliki cookie i sesje w innych moich projektach. Ale w tym projekcie zaczynaliśmy od początku używać standardowych ról asp.net i członkostwa. Myśleliśmy, że to zadziała i po tym, jak wszystko zostało zbudowane w czasie testów, to po prostu nie zadziałało. a teraz nie możemy zastąpić istniejącej funkcjonalności standardowymi rolami asp.net i członkostwem własnymi niestandardowymi tabelami użytkowników i wszystkimi rzeczami, rozumiecie o co mi chodzi.
Albo jest jakiś błąd ze standardowymi rolami asp.net i funkcjonalnością członkostwa albo mam całą koncepcję standardowych ról asp.net i członkostwa źle. Stwierdziłem, co chcę powyżej. Myślę, że to bardzo proste i rozsądne.
co zrobiłem
- Logowanie z nazwę użytkownika, hasło i zapamiętaj pole.
- Moje ustawienie w pliku web.config:
uwierzytelniania
< mode = "Forms" >
< formy loginUrl = "~/Konto/logowania" timeout = "2880"/>
</uwierzytelnianie > w Moje działanie kontrolera, mam to:
FormsAuth.SignIn (nazwa użytkownika, rememberMe);
publiczny void SignIn (string nazwa_użytkownika, bool createPersistentCookie) { FormsAuthentication.SetAuthCookie (userName, createPersistentCookie); }
Teraz problemy są następujące:
już zaznaczono w powyższej sekcji "Po prostu trzeba to". użytkownik może pomyślnie zalogować się do systemu. Ich sesja istnieje przez tyle minut, ile podano w wartości limitu czasu w web.config. Podałem także próbkę mojego pliku web.config. W moim samplem, jeśli ustawię limit czasu na 5 minut, sesja użytkownika wygasa po 5 minutach, to jest w porządku. Ale jeśli użytkownik zamknie przeglądarkę i ponownie otworzy przeglądarkę, użytkownik może nadal wchodzić na stronę internetową bez logowania do czasu określonego w "timeout". Przesuwane wygaśnięcie wartości limitu czasu również działa poprawnie. Teraz, jeśli użytkownik zaloguje się do systemu z zapamiętywaniem mnie zaznaczonym, sesja użytkownika nadal wygasa po 5 minutach. To nie jest dobre zachowanie, prawda ?. Chcę powiedzieć, że jeśli użytkownik zaloguje się do systemu z zapamiętywaniem mnie, powinien być zapamiętany przez długi czas, dopóki nie wyloguje się z systemu lub użytkownik nie usunie ręcznie wszystkich plików cookie z przeglądarki. Jeśli użytkownik zaloguje się do systemu bez zapamiętywania mnie, jego sesja powinna wygasnąć po przekroczeniu limitu czasu określonego w pliku web.config, a także wtedy, gdy użytkownicy zamkną przeglądarkę. Problem polega na tym, że jeśli użytkownik zamknie przeglądarkę i otworzy ją ponownie, może nadal wchodzić na stronę internetową bez logowania.
Często przeszukuję internet na ten temat, ale nie mogłem go rozwiązać. W poście na blogu (http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx) wykonanym przez Scotta Gu na dokładnie ten sam temat. Użytkownicy narzekają na to samo w swoich komentarzach, nie ma łatwego rozwiązania podanego przez pana Scotta.
Czytałem go w następujących miejscach: http://weblogs.asp.net/scottgu/archive/2005/11/08/430011.aspx http://geekswithblogs.net/vivek/archive/2006/09/14/91191.aspx
myślę, że to jest problem z partii użytkowników. Jak wynika z postu na blogu autorstwa pana Scotta Gu.
Twoja pomoc będzie naprawdę doceniana. Z góry dzięki.
Niestety, tldr. :) – kervin
Masz rację. Twoje pytanie jest za długie. Powinieneś zrobić to krócej. –
BTW, to pan Scott Guthrie aka The Gu. –