asp.net - 重用 CookieContainer 时如何确定 session 超时

标签 asp.net httpwebrequest httpwebresponse session-timeout cookiecontainer

我有以下代码,它重新使用 CookieContainer,该 CookieContainer 在第一个请求时登录,但仅使用 Cookie 容器来处理之后的请求。

一段时间后如果闲置,网站会出现 session 超时,我需要再次执行登录。

问:我可以(使用 cookie 容器对象)确定是否发生超时,或者最好从恰好包含“ session 超时”等文本的 HttpWebResponse 确定是否发生超时。最好的方法是什么?

        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;
        }
    }

然后这个方法调用容器:

        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
        }

最佳答案

嗯,由于超时时间为 30 分钟,所以我将登录设置为 25 分钟后重复登录。

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;
        }
    }

作为额外的预防措施,我检查 HttpResponse 中是否有页面 session 超时时返回的文本(尽管现在预计这不会被看到)。如果发生这种情况,我将 lastLoggedIn 日期设置为 null 并再次运行搜索方法。

关于asp.net - 重用 CookieContainer 时如何确定 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1041851/

相关文章:

c# - ASP.NET MVC : LogOut Heartbeat function

c# - 避免向列表 C# 添加重复元素

c# - 如何等到使用 HttpWebRequest 的 Web 请求完成?

c# - c# 中的 HttpWebRequest 不适用于 .net 4.5

javascript - 如何将此表中的数据作为列表提交到 asp.net mvc 中的操作?

asp.net - 弹出保存图片到asp.net

.NET 的 Cookie 解析器 (CookieContainer) 损坏

c# - C# 中的 Httpwebresponse 到 Httpresponsemessage

c# - HttpWebResponse - 正确处理连接

windows-mobile - .NET CF 3.5 中的 HttpWebRequest 和 SSL