1

在开发 C# 应用程序(我的第一个 C# 应用程序)时:

  • 从用户(id,pass)获取登录信息,
  • 打开HttpWebRequest到 ASP.NET 网页的新连接
  • 尝试使用获得的 [id,pass] 元组登录到此页面。如果登录成功,我的HttpWebRequest对象包含一个 cookie,它将用于登录另一个页面。

在请求第二个(受保护的)页面之前,我想确保第一次登录成功。首先,我认为只有在登录成功的情况下,服务器才会发送一个 cookie。但事实并非如此。:)

是否可以从收到的 cookie 对象中了解我的登录成功?或者您可以为我提出其他解决此问题的方法吗?

4

3 回答 3

3

感谢所有回复。这是我奇怪的解决方案。:) 我写这个是因为将来有人可能需要它。

我收到的 cookie 不包含特定的 [name,value] 对,例如 [logged,true]。我收到的唯一东西是:

Set-Cookie: ASP.NET_SessionId=ah0b2kj40oi0vuufv0mmot35; path=/; HttpOnly\r\n

所以,我以为我走错了方向,并试图找到另一种方法来分析登录是否成功。我的解决方案是使用响应的 StatusCode。我意识到(感谢 Jason 关于错误代码 401 的评论)如果登录成功,服务器会返回一个 HTTP 302 Found 状态代码。但如果登录不成功,它会返回相同的登录页面(即 HTTP 200 OK)。因此,根据收到的响应的 HTTP 代码,我决定它是否成功。这是示例代码:

//In LoginForm.cs
if (((HttpWebResponse)request.GetResponse()).StatusCode.ToString().Equals("Found"))
            {
                    nextUrl = ((HttpWebResponse)request.GetResponse()).Headers.Get(4);
                    StringBuilder FullUrl = new StringBuilder(this.server_address);
                    FullUrl.Append(nextUrl);
                    this.setSecretURL(FullUrl.ToString());

                    setLoginSuccess(true);
                    // now we can send out cookie along with a request for the protected page
                    request = WebRequest.Create(SECRET_PAGE_URL) as HttpWebRequest;
                    request.CookieContainer = cookies;
                    StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());

                    // and read the response
                    result = responseReader.ReadToEnd();
                    responseReader.Close();

     } else 
     {
          setLoginSuccess(false);                   
     }
于 2008-12-25T23:53:32.500 回答
2

如果用户未获得授权,则 Web 服务器应返回 HTTP 错误代码 401

于 2008-12-25T19:56:52.320 回答
1

我会做两件事之一。

  1. 我可以使用 Web 服务,而不是使用 aspx 页面。webservice login 方法会返回一个 xml 响应,告诉你登录是否成功,除了给你一个 cookie。(一些 StackOverflowers 可能不同意在 web 服务中使用 cookie,但我喜欢它们。)

  2. 您的登录页面可能更像是一个 API。假设您的网址如下所示:

    http://mywebsite.com/api.aspx?method=login&userid=sampleuser&password=password

    在响应 html 中,您可以发回可解析的消息,可以只是文本或 xml。例如,结果页面可能只是说“成功”。您的 c# 应用程序可以读取此内容并看到您已成功登录。

    注意:您可能希望通过 POST 请求发送用户名和密码,并可能在发送之前对密码进行哈希处理。

祝你好运!

于 2008-12-25T20:07:26.700 回答