资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

androidwebviewcan'tgetvertxsession-创新互联

android webview can't get session when using target="_blank" with link.

创新互联建站是一家专业提供凉山州企业网站建设,专注与成都网站制作、网站设计、H5场景定制、小程序制作等业务。10年已为凉山州众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

### Version 3.5.1 (maybe 3.5.0 included,not sure)

* vert.x core:

* vert.x web:

### Context

I used android webview to call a vertx url,when I switched from one page to another, the vertx server would always generate a new session id, so I lost session data set by previous page.

But,when I use iphone webview or PC Chrome to call the same vertx server, the session can be remembered correctly.  so the error is only subject to android webview

### Do you have a reproducer?

we can reproducer the error following the steps below.

### Steps to reproduce

1. write a smiple verticle

public class Test1Verticle  extends AbstractVerticle {
	 Router router1 ; 
	  @Override
	  public void start() throws Exception {
	    router1 = Router.router(vertx);	 	    
	    router1.route().handler(CookieHandler.create());
	    router1.route().handler(SessionHandler.create(LocalSessionStore.create(vertx)));
	    router1.route("/h6/*").handler(StaticHandler.create("web/h6"));
	    router1.route("/hit").handler(this::hit);	
	    vertx.createHttpServer().requestHandler(router1::accept).listen(8080) ;    
	  }	  
	  private void hit(RoutingContext routingContext) {
		  Session session = routingContext.session();
	      Integer cnt = session.get("hitcount");
	      cnt = (cnt == null ? 0 : cnt) + 1;
	      session.put("hitcount", cnt);
		  routingContext.response().putHeader("content-type", "application/json;charset=UTF-8")
         .end(new JsonObject().put("data", "cnt="+cnt) );
	   } 
	  
	}

2.  place 2 html files in the web/h6 file folder,named test3.html and test4.html respectively. test3.html source code:



	
	
	test3.html
	


call test4
$.ajax({ url:"/hit?time="+(new Date().getTime()),  type:"post",  dataType : "json", success: function(resp){ console.log(resp) $("#myData").html(resp.data); }, error: function(){ $j("#myData").html("error."); me.resetload(); } });

the source code of test4.html is similar to the above,just replace the href to test3.html

3. ...

start the vertx verticle, and open an android browser,input the url (http://192.168.0.13:8080/h6/test3.html) in the browser,then submit

4.  you can find ,after jump to the other html,the hit count remains to 1, but if you call the url in iphone or PC browser, the hit count will be found to increment correctly.

5,if we remove the target="_blank" in the html file, the session will work properly

2018-04-21 13:42 update:

I tested on several android phone ,and foud that the session problem did not appear on all android phone, Mi and Huawei could reproduce this error,but sumsung and Lenovo worked correctly.

at last,I added some code in my verticle file to address this problem:

//to make session work correctly on Huawei phone, set Cookie Path to root '/' 
        Set ccList=routingContext.cookies();
        for(Cookie ck:ccList){
        	ck.setPath("/");        	
        }

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


新闻名称:androidwebviewcan'tgetvertxsession-创新互联
文章起源:http://cdkjz.cn/article/ccjodi.html
返回首页 了解更多建站资讯
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220