是否可以根据收到的cookie了解成功登录?

时间:2008-12-25 19:39:59

标签: c# cookies login httpwebrequest

我正在开发一个执行此操作的C#应用​​程序(顺便说一下,这也是我的第一个C#应用程序。):

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

在请求第二个(受保护的)页面之前,我想确保首次登录成功。首先,我认为只有登录成功,服务器才会发送cookie。但事实并非如此。 :)是否可以从收到的cookie对象中了解我的登录成功?或者你有什么其他方法可以帮我解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我会做两件事之一。

  1. 我可以使用网络服务,而不是使用aspx页面。除了为您提供cookie之外,webservice登录方法还将返回一个xml响应,该响应将告诉您登录是否成功。 (有些StackOverflowers可能不同意使用cookies和webservices,但我喜欢它们。)

  2. 您的登录页面可能更像是一个API。让我们说你的网址看起来像这样:

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

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

    注意:您可能希望通过POST请求发送用户名和密码,并可能在发送之前散列密码。

  3. 祝你好运!