php session_id()获取不到,Android网络请求获取不到session , 或者sessionid一直变化的原因...

做项目有需求给后台传递的json数据 , 这个数据在后续操作中还会使用, 所以我们后台选择了使用session进行临时保存, 我是android 端,访问php接口 , 但在后面接口获取session中的数据时,我获取到的session数据一直为空. 而iOS则可以正常的获取数据.关于Cookie和Session的介绍。

原因和解决方法

原因很简单,就是因为android手机端在访问web服务器时,没有给http请求头部设置sessionID

解决方法, 第一次请求成功。需要把session的值保存起来.再后续需要使用session的时候,将传递保存的sessionID传过去

本地存储sessionID(这里以Retrofit自定义拦截器来保存sessionID)

public class commonInterceptor implements Interceptor {

@Override

public Response intercept(Chain chain) throws IOException {

Request request = chain.request();

//添加公共参数

if (request.method().equals("GET")) {

request = addGetParams(request);

} else if (request.method().equals("POST")) {

request = addPostParams(request);

}

//判断接口是否需要使用session

if (SPUtils.getInstance().getBoolean(MultipleFields.UPDATE_COOKIES.toString(), false)) {

//获取Cookie

getCookie(chain, request);

Request request_cookie = setCookie(request);

return chain.proceed(request_cookie);

}

return chain.proceed(request);

}

private void getCookie(Chain chain, Request request) throws IOException {

// 获取 Cookie

Response resp = chain.proceed(request);

List cookies = resp.headers("Set-Cookie");

String cookieStr = "";

if (cookies != null && cookies.size() > 0) {

String s = cookies.get(0);

//sessionid值格式:JSESSIONID=AD5F5C9EEB16C71EC3725DBF209F6178,是键值对,不是单指值

cookieStr = s.substring(0, s.indexOf(";"));

//持久化到本地

SPUtils.getInstance().put(MultipleFields.COOKIES.toString(), cookieStr);

}

}

private Request setCookie(Request request) {

//设置cookie

String cookieStr = SPUtils.getInstance().getString(MultipleFields.COOKIES.toString(), "");

//判断cookie不为空

if (!cookieStr.isEmpty()) {

Request cookieRequest = request.newBuilder().addHeader("Cookie", cookieStr).build();

return cookieRequest ;

}

return request;

}

}

存储后发现仍然无法获取到对应的session中的数据 , 最后发现每次从后台获取到的sessionId ,都时不同的, 是一直变化的, 最后发现这个需要后台也做相应的处理 ,服务器需要根据传过去sessionID获取对应的Session,而不是重新创建一个新Session(除了这个Session失效)。

php代码

第一次创建session 直接session_start();

session_start();

再次使用刚才session时要根据传过去sessionID获取对应的Session,而不是重新创建一个新Session

$cookData = $_SERVER['HTTP_COOKIE'];

$sessionid = substr($cookData,strpos($cookData,'=')+1);

Session_id($sessionid);

session_start();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值