You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP跨文件$_SESSION变量获取失败问题求助

会话(Session)跨请求丢失排查方案
  • 检查Retrofit的Cookie携带机制
    PHP Session依赖PHPSESSID Cookie识别会话,但Retrofit默认不会自动保存和携带Cookie。需为Retrofit配置Cookie持久化:

    CookieJar cookieJar = new CookieJar() {
        private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
    
        @Override
        public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
            cookieStore.put(url.host(), cookies);
        }
    
        @Override
        public List<Cookie> loadForRequest(HttpUrl url) {
            List<Cookie> cookies = cookieStore.get(url.host());
            return cookies != null ? cookies : new ArrayList<>();
        }
    };
    
    OkHttpClient client = new OkHttpClient.Builder()
            .cookieJar(cookieJar)
            .build();
    
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    
  • 验证PHP端Session的Cookie配置
    检查php.ini关键参数:

    • session.cookie_domain:若服务与Android应用域名/IP不同,需注释该配置或设为对应值;
    • session.cookie_secure:HTTP测试时必须设为Off,HTTPS环境设为On;
    • session.cookie_httponly:设为On不影响Retrofit,但需确保无前端JS操作Cookie的场景。
  • 在PHP端添加调试日志
    在addrelease.php开头加入调试代码,确认会话识别状态:

    <?php
    session_start();
    // 写入服务器日志
    error_log("当前Session ID: " . session_id());
    error_log("Session中user_id值: " . (isset($_SESSION['user_id']) ? $_SESSION['user_id'] : '未设置'));
    
    // 临时返回调试信息给Android(测试用)
    echo json_encode([
        'session_id' => session_id(),
        'user_id' => isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null
    ]);
    exit;
    

    对比loginuser.php输出的Session ID,若不一致则说明会话未正确传递。

  • 处理跨域(CORS)配置
    若服务与Android应用跨域,需在PHP端设置允许携带Cookie的CORS头:

    header("Access-Control-Allow-Origin: 你的Android应用IP/域名");
    header("Access-Control-Allow-Credentials: true");
    header("Access-Control-Allow-Methods: POST, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type");
    

    注意Access-Control-Allow-Origin不能设为*,必须指定具体地址。

内容的提问来源于stack exchange,提问作者dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:05:21