场景:比如说现在有两个接口,用户登录接口a,和获取用户信息接口b。浏览器调用完全没有问题,现在要用jq的
ajax
调用这两个接口,就出问题了。
先说浏览器。
我在浏览器输入登录接口a地址,传递参数,登录成功。服务端(php)将我的用户id,用户名等存在session
里。接下来请求获取用户信息接口b,服务器直接从session里找到用户信息,返回浏览器,成功!
再说 ajax。
我在js里用ajax调用登录接口,返回成功信息,登录成功。同样sesion里存了用户信息。但是我接下来用ajax调用获取用户信息接口b的时候,就出问题了,提示session
找不到。
我在控制台里看了下,浏览器登录成功之后,在响应头里会返回set-cookie
的信息,下一次请求同一域名下的接口,会自动在请求头中发送cookie
,从而获取服务器中session
的数据。
在ajax请求的情况下,登录成功同样会在响应头里会返回set-cookie
的信息,可是下一次请求同一域名下的接口,却不会自动发送cookie
,所以找不到服务器的session
数据。
那么问题来了:
我若想拿到session数据,在ajax请求时,是要手动发送cookie吗?如果不是,怎么拿到session数据?
求大神解答!
ajax
请求添加参数xhrFields: { withCredentials: true },
php 设置
header('Access-Control-Allow-Credentials:true');
session是依赖cookie的,你服务器中的cookie存到什么地方了?
就算是你把你客户端的浏览器中的cookie传过去了,和服务器中的cookie是否一致啊?
所以说在服务器中村session就是不行的,你只能是用token来做,而且后台存储信息要用redis什么的。