如何确定会话超时重用的CookieContainer使用时
-
22-07-2019 - |
题
我有以下代码从而重新使用的CookieContainer它记录在所述第一请求,但只使用用于请求该cookie容器之后。
在一段时间内,如果闲置网站会给出一个会话超时,我将需要重新进行登录。
问:能否确定(与cookie容器对象)如果超时发生或者是它最好以确定其是否已经从恰好包含像“会话超时”文本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。如果发生这种情况我设置lastLoggedIn日期为空,然后重新运行搜索方法。
其他提示
可以提取用于使用CookieContainer.GetCookies(串URI)方法的域的所有cookie。使用此CookieCollection你可以得到你感兴趣的cookie,并检查其过期属性,看它是否已过期。
有一件事你应该注意:您的会话可能会结束,即使你的cookie是有效的。 IIS可能会重新启动Web应用程序,并在这种情况下,所有通过认证的用户可能会失去他们的会话数据运行应用程序域。所以检查cookie是一般不足以确保您能登录。
我不知道你想达到什么,但你应该注意到的CookieContainer对。新增(曲奇)和.GetCookies(URI)方法。
中的错误请参阅的细节和固定位置:
HTTP://点-net-expertise.blogspot.com/2009/10/cookiecontainer-domain-handling-bug-fix.html
不隶属于 StackOverflow