为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
汪汪一只猫 2019-03-05 19:42:19
我用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是可以用的。求各位大神指出错误,感谢。
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

还是自问自答,好像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!

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 1012 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信