Jak lze zjistit, Session Timeout pomocí při opětovné CookieContainer

hlasů
2

Mám následující kód, který opětovně používá CookieContainer který přihlásí na první žádost, ale prostě používá kontejner cookie pro požadavky poté.

Po určité době nečinnosti, pokud bude místo poskytnutí časového limitu relace, budu muset znovu provést přihlášení.

Otázka: Mohu zjistit (s objektem cookie kontejneru) v případě, že časový limit se stalo, nebo je to nejlepší, abyste zjistili, zda se to stalo z HttpWebResponse který se stane obsahuje text jako ‚doby relace‘. Jaký je nejlepší způsob, jak to udělat?

        private static CookieContainer _cookieContainer;
    private static CookieContainer CurrentCookieContainer
    {
        get
        {
            if (_cookieContainer == null || _cookieContainer.Count == 0)
            {
                lock (_lock)
                {
                    if (_cookieContainer == null || _cookieContainer.Count == 0)
                    {
                        //_cookieContainer.GetCookies(
                        _cookieContainer = DoLogin();
                    }
                }
            }

            return _cookieContainer;
        }
        set
        {
            _cookieContainer = value;
        }
    }

A pak se tato metoda volá na obalu:

        public static string SomeMethod(SomeParams p)
        {
            HttpWebRequest request_thirdPartyEnquiryDetails = (HttpWebRequest)WebRequest.Create(thirdPartyEnquiryDetails);
            CookieContainer cookieContainer = CurrentCookieContainer;
            request_thirdPartyEnquiryDetails.CookieContainer = cookieContainer;
//... and it goes on to submit a search and return the response
        }
Položena 25/06/2009 v 01:03
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

No, protože časový limit je 30 min, jsem nastavit přihlašovací opakovat po 25 minutách.

private static DateTime? lastLoggedIn;

    private static CookieContainer _cookieContainer;
    private static CookieContainer CurrentCookieContainer
    {
        get
        {
            if (_cookieContainer == null || _cookieContainer.Count == 0 || !lastLoggedIn.HasValue || lastLoggedIn.Value.AddMinutes(25) < DateTime.Now)
            {
                lock (_lock)
                {
                    if (_cookieContainer == null || _cookieContainer.Count == 0 || !lastLoggedIn.HasValue || lastLoggedIn.Value.AddMinutes(25) < DateTime.Now)
                    {
                        _cookieContainer = DoLogin();
                        lastLoggedIn = DateTime.Now;
                    }                        
                }
            }

            return _cookieContainer;
        }
        set
        {
            _cookieContainer = value;
        }
    }

Jako další bezpečnostní opatření, mohu zjistit HttpResponse pro text, který se vrací, když časy strana relace out (ačkoli jeho nyní očekává, že to nebude vidět). Pokud se to stane, jsem nastavil lastLoggedIn datum null a znovu spustit metodu vyhledávání.

Odpovězeno 25/06/2009 v 04:25
zdroj uživatelem

hlasů
1

Můžete získat všechny soubory cookie pro doménu pomocí CookieContainer.GetCookies metodou (string URI). Použitím tohoto CookieCollection můžete získat cookie, který vás zajímá, a zkontrolovat jeho vypršela vlastnost aby zjistil, zda již uplynula.

Existuje jedna věc, kterou byste měli vzít na vědomí: Vaše jednání může skončit i když vaše cookie platný. IIS může restartování doménu aplikace webové aplikace běží a to jen v tom případě, že všechny ověření uživatelé mohou ztratit svá data relace. Takže kontrola cookie je obvykle nestačí, aby zajistily, že jste zůstat přihlášen.

Odpovězeno 25/06/2009 v 06:20
zdroj uživatelem

hlasů
0

Nejsem si jistý, co chcete dosáhnout, ale měli byste si všimnout, že CookieContainer má chybu na .Add (cookie) a .GetCookies metodou (URI).

Podívejte se na podrobnosti a opravit zde:

http://dot-net-expertise.blogspot.com/2009/10/cookiecontainer-domain-handling-bug-fix.html

Odpovězeno 08/10/2009 v 12:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more