HttpPost:没有“Set-Cookie”标题

时间:2011-10-24 22:06:37

标签: android cookies http-post

我想获取网站的会话cookie。不幸的是,“Set-Cookie”-Header没有显示出来。

这是我写的代码: “commands”是一个String [] [],整个代码由try / catch包装。

CookieStore cookieStore = new BasicCookieStore();
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE,cookieStore);
HttpPost httppost = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>(0);
for (int i=0;i<commands.length;++i)
    nvps.add(new BasicNameValuePair(commands[i][0],commands[i][1]));
httppost.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
Header[] headers = response.getAllHeaders();
List<Cookie> cookies = cookieStore.getCookies();
String data = EntityUtils.toString(entity);

我对Http Communication的理解告诉我应该有一个“Set-Cookie”标题。我从response.getAllHeaders()获得的唯一Headers是Connection:close,X-Powered-By:PHP / 4.3.4和Content-Type:text / html

返回的数据中包含一些javascript(response.getEntity())。

<script language = "javascript">
<!--
location.href="/index.php";
function SetCookie(name,value,expire,path){
    document.cookie = name + "=" + escape(value) + ((path == null) ? "":(";path="+path))
}
var iad = 461180104
SetCookie("iad",iad,0,"/")
-->
</script>

据我了解,此代码永远不会被执行,因为它只是一个注释?! 但同样这可能是应该创建cookie的位置。

有什么想法吗?

更新: “Opera Mobile”是我发现的唯一Android浏览器,该网站上的cookie没有任何问题。 “Opera Mini”,“Dolphin HD”和Froyo Stock浏览器都失败了。没有桌面浏览器连接有问题。这是一个webkit问题吗?如果是这种情况:如何避免它?

1 个答案:

答案 0 :(得分:0)

使用Chrome的开发者工具或Firebug,检查&#34; expires&#34;的HTTP响应。 Set-Cookie标头字段中的参数。确保手机上的时间/日期设置设置正确。如果浏览器认为cookie已经过期,则不会存储它。

如果这不起作用,请尝试使用wireshark / tshark从客户端获取通信记录,并将其与按预期方式工作的浏览器进行比较。

顺便说一句,围绕Javascript的注释分隔符不会阻止脚本运行;它们只是阻止较旧的(真正旧的)浏览器尝试在文档中呈现脚本。那个cookie(&#34; iab&#34;)看起来不像用于身份验证的cookie。可能是具有会话标识符的仅http cookie;你应该能够使用前面提到的Firebug / Dev工具来看它。