RN中的fetch网络请求



  • 在安卓中,每次请求会话的session都是一样的。。。。但在IOS中,每次请求会话的session都是新创建的。。。。我原本是,在登录成功后,把用户信息放到session中去,再次请求时,在安卓中可以成功拿 到session中保存的用户信息,但在IOS下不能取到,为Null,调试发下,IOS下的每次请求session都是新创建的。。。。各位大神有没有遇到过?什么原因?我用的是http,非https,难道是IOS对http每次请求都新建一个session会话?而不像安卓那样?



  • 1_1517968581967_QQ图片20180207095549.png 0_1517968581966_QQ图片20180207094313.png 这就是最好的证明



  • iOS的也是可以的,你只需要要原生部分拿到JSESSIONID,然后回传给RN,然后每次请求的时候设置请求头cookie就行了的



  • 改原生?什么情况???



  • 不是改原生,fetch请求本就和原生的NSURLSession有关的,你只需要要原生部分拿到JSESSIONID,然后回传给RN,然后每次请求的时候设置请求头cookie就行了的



  • NSMutableDictionary *muInitialPropertiesDic = [[NSMutableDictionary alloc] init];
    BNUserModel *userModel = [BNUserModel sharedUserModel];
    [muInitialPropertiesDic setObject:[self dictionaryWithModel:userModel] forKey:@"userInfoData"];
    [muInitialPropertiesDic setObject:KToken forKey:@"KToken"];
    NSArray *cookiesArray = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    NSDictionary *cookieDict = [NSHTTPCookie requestHeaderFieldsWithCookies:cookiesArray];
    NSString *cookie = [cookieDict objectForKey:@"Cookie"];
    [muInitialPropertiesDic setObject:cookie forKey:@"JSESSIONID"];

    // jsCodeLocation = [CodePush bundleURL];
    _rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
    moduleName:@"BNEIHExpand"
    initialProperties:muInitialPropertiesDic
    launchOptions:nil];

    然后RN那边通过this.props. JSESSIONID就可以拿到原生回传给的东西



  • @wisejin 大兄弟能给看下怎么获取到JSESSIONID,然后设置请求头cookie的吗,在封装fetch 请求卡在这里了



  • 我上面的就是iOS获取JSESSIONID的啊,fetch(url ,{method:'POST', credentials:'includes', body:parameter, headers:{
    "sign":signStr,
    "token":baseInfo.token,
    "functionName":functionName,
    "cookie":baseInfo.JSESSIONID
    }})
    .then((response) => response.text())
    .then((responseText) => {
    // console.log('response:'+responseText)
    successCallback(JSON.parse((responseText)));
    })
    .catch((err) => {
    //alert('错误:'+err);
    failCallback(err);
    }); 这个就是把JSESSIONID赋值到fetch头里面去