【问题标题】:Keeping a session when using HttpWebRequest使用 HttpWebRequest 时保持会话
【发布时间】:2011-06-08 15:49:54
【问题描述】:

在我的项目中,我使用 C# 应用程序客户端和 tomcat6 Web 应用程序服务器。 我在 C# 客户端写了这个 sn-p:

public bool isServerOnline()
{
        Boolean ret = false;

        try
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(VPMacro.MacroUploader.SERVER_URL);
            req.Method = "HEAD";
            req.KeepAlive = false;
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            if (resp.StatusCode == HttpStatusCode.OK)
            {
                // HTTP = 200 - Internet connection available, server online
                ret = true;
            }
            resp.Close();
            return ret;

        }
        catch (WebException we)
        {
            // Exception - connection not available
            Log.e("InternetUtils - isServerOnline - " + we.Status);
            return false;
        }
}

每次调用此方法时,我都会在服务器端获得一个新会话。 我想这是因为我应该在我的客户端中使用 HTTP cookie。但我不知道该怎么做,你能帮帮我吗?

【问题讨论】:

  • 好问题!过去的转移会议让我保持清醒
  • 你解决了这个问题吗?
  • 我当时使用了纪尧姆的建议
  • 好的,但是如何管理过期的 cookie?是用 CookieContainer 自动实现的吗?

标签: c# httpwebrequest session-cookies


【解决方案1】:

您必须使用 CookieContainer 并在调用之间保留实例。

private CookieContainer cookieContainer = new CookieContainer();
public bool isServerOnline()
{
        Boolean ret = false;

        try
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(VPMacro.MacroUploader.SERVER_URL);
            req.CookieContainer = cookieContainer; // <= HERE
            req.Method = "HEAD";
            req.KeepAlive = false;
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            if (resp.StatusCode == HttpStatusCode.OK)
            {
                // HTTP = 200 - Internet connection available, server online
                ret = true;
            }
            resp.Close();
            return ret;

        }
        catch (WebException we)
        {
            // Exception - connection not available
            Log.e("InternetUtils - isServerOnline - " + we.Status);
            return false;
        }
}

【讨论】:

  • 谢谢,我试了一下,让你知道这是否有效。但我有一个问题:如果 cookie 过期了,我该如何管理?
  • 另一个问题,但我不应该从响应中获取 Cookie?
  • 容器将被填充,您不必关心响应cookie。容器的大小也是有限的,当达到限制时,过期的 cookie 将被删除。
  • ASP。 Net mvc 是一个服务器端框架。 cookie 容器是客户端。所以是的,只要使用 cookie,无论服务器端堆栈如何,它都可以工作
  • 我可以使用这种方法来保留基本身份验证会话吗?我也可以为几个不同的用户名和密码对使用相同的 cookie 容器实例吗?
猜你喜欢
  • 2011-09-05
  • 2011-08-17
  • 1970-01-01
  • 2010-11-30
  • 2021-03-07
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2012-11-05
相关资源
最近更新 更多