簡體   English   中英

ASP.net Adob​​e Air通訊,會話控制

[英]ASP.net Adobe Air communication, session control

項目:Adobe Air for Android,已連接到ASP.net。 這是AS3代碼:

//First login to the server and also grabbing from there ASP_NET_SessionId data (Cookie).
var session:String;

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;

var request:URLRequest= new URLRequest("https://somedomain.com/someaddress.aspx"); //yes with https
request.data = '{ "Message":"Login", "Data": { "User":"some@email.com", "Password":"somepassword" }}';
request.method = URLRequestMethod.POST;   

loader.addEventListener( HTTPStatusEvent.HTTP_RESPONSE_STATUS, httpStatusHandler);   
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request);

private function httpStatusHandler(e:HTTPStatusEvent):void 
{
    for each (var object:Object in e.responseHeaders)
    {
           if (object.name == "Set-Cookie")
           {
              var match:Array =object.value.match(/ASP.NET_SessionId=(.*?);/i);
              session = match[1];
              return
           }
    }
}

下一個電話是會話數據(Cookie),我已經得到了:

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY; //now I just need binary data

var request:URLRequest= new URLRequest("https://somedomain.com/someaddress.aspx"); //yes with https
request.data = '{ "Message":"DoSomeStaff", "Data": { "Some":"info"}}';   
request.method = URLRequestMethod.POST;
request.requestHeaders = new Array(new URLRequestHeader("Cookie", "ASP.NET_SessionId=" + session )); //addedd Cookie data here

loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request);

而且我在服務器上丟失會話,無法獲取數據(需要重新登錄)

我在crossdomain.xml中也有這行

allow-http-request-headers-from domain="*" headers="*"

ASP.net服務器端沒有問題的原因,來自PHP的相同調用也可以正常工作。 這里是:

$data_string ='{ "Message":"Login", "Data": { "User":"some@email.com", "Password":"somepassword" }}';
$ch = curl_init('https://somedomain.com/someaddress.aspx');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json charset: UTF-8','Content-Length: ' . mb_strlen($data_string)));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER ,1);
$result = curl_exec($ch);
curl_close($ch);

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m);
parse_str($m[1], $cookies);
$sessionId = $cookies["ASP_NET_SessionId"];

在下一個電話中,我僅使用該會話變量:

curl_setopt($ch, CURLOPT_COOKIE, "ASP.NET_SessionId=$sessionId; path=/");

而且一切正常。

我的問題是:我的Actionscript代碼中缺少什么? 或者可能是個問題?

您是否檢查過您的應用是否實際收到了正確的Cookie數據? 以及您的服務器是否實際上正在接收預期的cookie標頭?

以我的經驗,在不同的操作系統/設備上,AIR和cookie一直很時髦。 但是,至少在模擬器中,AIR本身可以很好地處理cookie檢索/發送(在應用程序生命周期中),因此您可以嘗試一下以進一步隔離問題。

從理論上講,它不是必須的,但也可以嘗試將request.manageCookies設置為false (至少在Windows中是必需的),以確保AIR實際上允許您設置可能由其自身定義的cookie頭。

順便說一句,跨域限制僅適用於瀏覽器內容,不適用於應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM