在titanium內建的HTTPClient
本身就有實作cookie的功能,使用起來跟瀏覽器一樣,會自動解析response header,及發送以設定的cookie,而不需要額外去解析header,和添加request的header,要清除cookie可以使用clearCookies
,若要在client端設定cookie,可以使用setRequestHeader
。
清除與設定cookie
建立一個HTTPClient:
1 | var client = Ti.Network.createHTTPClient({}); |
指定清除某個網域底下的cookie:
1 | client.clearCookies( "www.example.com" ); |
由client設定cookie:
1 | client.setRequestHeader( "cookie", "name=sparrow;" ); |
使用cookie常見問題
通常cookie能不能被存取,會依照expires、path、domain、HttpOnly、secure這幾項辨識:
expires : cookie的時效性,當時間超過expires設定的日期,這個cookie將會被捨棄。
1
expires=Sat, 17-Oct-2015 14:11:09 GMT;
path : 在domain下,cookie允許存取的路徑。
1
path=/;
domain : cookie允許存取的domain。
1
2
3
4domain=.google.com.tw;
最前面的.指得是子網域皆可存取,例如:
www.google.com.tw
ad.google.com.twHttpOnly : 在瀏覽器下看到這個屬性時,只允許server端操作此cookie,換句話說client雖然存此cookie,卻無權操作,可防止透過xss將cookie偷走。
1
HttpOnly
secure :只允許在https上操作此cookie,在一般http接無法存取。
1
secure;
如果有用到nginx、apache這類的server去做proxy,需要檢查path或domain,才不會遇到cookie無效的狀況。
解析response的header
在android的device,如果想要取得header的內容可以使用allResponseHeaders
,雖然titanium有提供getResponseHeader
的功能,實際使用過都無法取得到值。
在onload取值:
1 | client.onload = function(){ |
如果你想取得一個header的json,可以實作一個類似這種function:
1 |
|
透過getHeaders取值:
1 | var headers = getHeaders( client.allResponseHeaders ); |