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://hbruida.cn/article/ccjodi.html

其他资讯