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://bzwzjz.com/article/ccjodi.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 上市集团网站建设 成都网站建设流程 成都网站建设 网站制作 成都响应式网站建设 高端定制网站设计 手机网站建设套餐 成都网站设计 成都企业网站建设公司 成都网站建设 成都网站建设 成都网站制作 定制级高端网站建设 品牌网站建设 重庆网站建设 成都网站建设 温江网站设计 企业网站设计 成都网站设计 成都网站制作 手机网站建设 成都网站设计