[英]C# post requests not identified as session
我一直在嘗試讓WPF客戶端連接到PHP服務器,自行登錄並獲取“ IsLogged.php”以驗證客戶端已登錄。但是,“ IsLogged.php”始終返回客戶端未登錄的信息。身份驗證,我在做什么錯?
服務器代碼:
“ CreateAccount.php”
session_start();
if (isset($_POST['user']))
{
$_SESSION['UserName'] = $_POST['user'];
echo "check";
}
“ IsLogged.php”
session_start();
if (isset($_SESSION['UserName']))
{
echo "allowed";
}
else
{
echo "not allowed";
}
客戶代碼:
“發布”方法
public static string Post(string RequestName, string PostData, out HttpStatusCode ReturnCode)
{
byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
WebRequest Request = WebRequest.Create(ChatAPI.Settings.BaseUrl + RequestName);
Request.Method = "POST";
Request.ContentType = "application/x-www-form-urlencoded";
Request.ContentLength = byteArray.Length;
Stream dataStream = Request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = Request.GetResponse();
dataStream = response.GetResponseStream();
ReturnCode = ((HttpWebResponse)response).StatusCode;
StreamReader reader = new StreamReader(dataStream);
string returnedData = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return returnedData;
}
最后,窗口觸發POST請求。
HttpStatusCode Code;
MessageBox.Show(General.Post("IsLogged", "", out Code)); --> Not allowed (intended)
MessageBox.Show(General.Post("CreateAccount", "user=jan", out Code)); --> check (intended)
MessageBox.Show(General.Post("IsLogged", "", out Code)); --> Not allowed (should be allowed)
服務器為什么不將請求注冊為會話?
服務器識別客戶端的方式(以及相應的會話狀態)是通過cookie。
基本上,在CreateAccount
請求中,服務器將cookie附加到其響應中,並希望客戶端在每個后續請求中都顯示cookie。
如果請求中不存在Cookie,則服務器將無法識別客戶端並將請求視為來自未知源。
您的代碼根本不管理cookie,因此這就是C#客戶端始終看起來是PHP服務器的新客戶端的原因。
保存從服務器接收的cookie並將其顯示在每個新請求中的最簡單方法是使用CookieContainer
的實例, 並將其附加到您提出的每個請求上 。
我沒有嘗試過這段代碼,所以我不確定語法的百分百,但這是一個起點:
// this instance will be reused across multiple requests
private static CookieContainer cookieContainer = new CookieContainer();
public static string Post(string RequestName, string PostData, out HttpStatusCode ReturnCode)
{
byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
WebRequest Request = WebRequest.Create(ChatAPI.Settings.BaseUrl + RequestName);
Request.Method = "POST";
Request.ContentType = "application/x-www-form-urlencoded";
Request.ContentLength = byteArray.Length;
Request.CookieContainer = cookieContainer; // this line is new
Stream dataStream = Request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = Request.GetResponse();
dataStream = response.GetResponseStream();
ReturnCode = ((HttpWebResponse)response).StatusCode;
StreamReader reader = new StreamReader(dataStream);
string returnedData = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return returnedData;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.