PHP项目,response头有返回setCookie,但是为什么服务器端没有创建对应的seesion?

我用GUZZLE创建httpclient模拟请求自己的phpweb项目,确认web项目是有session_start()的,模拟登陆请求成功后,response-header里有Set-Cookie,当我用set-cookie里的PHPSESSID去请求下一个页面时,seesion不可用,到服务端查看session_save_path里确实没有对应的session。

我用浏览器访问登陆后拿到cookie,再写到代码里就可以通过,说明请求代码没问题。而且浏览器拿到的cookie在服务端的session_save_path里是有对应的session的。

相关代码

$client = new Client([
            'base_uri' => 'http://my.domain.com',

        ]);
        $response = $client->request('POST','/?action=sys&opt=login',[
            'action'=>'login',
            'uName'=>'myUName',
            'uPass'=>'myPwd',
        ]);
        print_r($response->getHeader('Set-Cookie'));//此处打印正常Array([0] => PHPSESSID=22fosfolsvoqardv5atdg0cnr2; expires=Sat, 19-Jan-2019 03:45:38 GMT; path=/; domain=my.domain.com)
        $cookie = substr((explode(';',($response->getHeader('Set-Cookie'))[0]))[0],10);


        $jar = CookieJar::fromArray(['PHPSESSID'=>$cookie],'my.domain.com');
        $response = $client->request('GET', '/?action=game&opt=gameindex&type=add',[
            'cookies'=>$jar
        ]);

可以确认服务端的session保存路径里没有response-header返回cookie里对应的session,也没有另外设置过session名,通过浏览器拿到的cookie是可以用的。求各位大神指出错误,感谢。

汪汪一只猫
浏览 1013回答 1
1回答

呼如林

还是自问自答,好像sf里phper非常少,我这里的通过xdebug的远程调试发现,我web代码里有一个Session['uName']判断,当他为空时会destory_session()删除服务器的session文件。我这里是有一个写法错误 $response = $client->request('POST','/?action=sys&opt=login',[ 'action'=>'login', 'uName'=>'myUName', 'uPass'=>'myPwd', ]); 这里应该修改为 $response = $client->request('POST','/?action=sys&opt=login',[ 'form_params' => [ 'action'=>'login', 'uName'=>'myUName', 'uPass'=>'myPwd', ] ]); post的参数才会被正确发送。Well done!
打开App,查看更多内容
随时随地看视频慕课网APP