我正在开发一个执行此操作的C#应用程序(顺便说一下,这也是我的第一个C#应用程序。):
HttpWebRequest
连接HttpWebRequest
对象包含一个cookie,用于登录另一个页面。 在请求第二个(受保护的)页面之前,我想确保首次登录成功。首先,我认为只有登录成功,服务器才会发送cookie。但事实并非如此。 :)是否可以从收到的cookie对象中了解我的登录成功?或者你有什么其他方法可以帮我解决这个问题吗?
提前致谢。
答案 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)
我会做两件事之一。
我可以使用网络服务,而不是使用aspx页面。除了为您提供cookie之外,webservice登录方法还将返回一个xml响应,该响应将告诉您登录是否成功。 (有些StackOverflowers可能不同意使用cookies和webservices,但我喜欢它们。)
您的登录页面可能更像是一个API。让我们说你的网址看起来像这样:
http://mywebsite.com/api.aspx?method=login&userid=sampleuser&password=password
在响应html中,您可以发回一条可解析的消息,该消息可以是text或xml。例如,结果页面可以说是“成功”。您的c#应用程序可以读取此信息并看到您已成功登录。
注意:您可能希望通过POST请求发送用户名和密码,并可能在发送之前散列密码。