API调用中PHP Session/Cookie获取异常问题求助
问题原因
当你在同域另一页面设置$_SESSION["gv_cust_cid4"]时,这个Session数据是和客户端(浏览器/Postman)的PHPSESSID Cookie绑定的:
- 最初
test-cookie2.php能输出值,是因为它在同一个请求周期内自己设置并读取了Session,和外部Session无关。 - 而Postman或
test-cookie3.php的CURL请求是独立的全新请求,默认不会携带之前设置Session时的PHPSESSIDCookie,服务器会为这个新请求创建全新的Session,自然读不到已设置的值。
解决方案
1. 让CURL请求携带目标Session的Cookie
修改test-cookie3.php的CURL配置,添加CURLOPT_COOKIE参数,传入对应Session的PHPSESSID值:
<?php $url = 'https://example.com/test-cookie2.php'; $curl = curl_init(); // 替换为你实际获取到的PHPSESSID(可从设置Session的页面的响应Cookie中拿到) $sessionCookie = 'PHPSESSID=abcdef1234567890'; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($curl, CURLOPT_COOKIE, $sessionCookie); // 携带Session Cookie curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); $data = curl_exec($curl); curl_close($curl); print_r($data); ?>
2. Postman调用的正确流程
- 先在Postman中访问设置Session的页面,此时Postman会自动保存服务器返回的
PHPSESSIDCookie; - 再调用
test-cookie2.php,Postman会自动携带该Cookie,就能读到已设置的Session值; - 若仍无法读取,检查Postman设置:确保开启了「Automatically send cookies」选项。
3. 同域脚本直接复用Session(更高效)
如果test-cookie3.php和设置Session的页面在同一服务器、同PHP环境下,完全不需要用CURL,直接在test-cookie3.php中启动Session读取即可:
<?php session_start(); echo '<br>Sessie: '.$_SESSION["gv_cust_cid4"]; ?>
内容的提问来源于stack exchange,提问作者TP Projects
相关产品推荐
相关产品推荐

