我不确定Symfony是否可以这样做,所以我想出了一个问题。高级方案是:
出于测试目的,我使用两个REST客户端作为浏览器实例:
以下是我所做的代码方法:
邮递员的要求:
POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value"
}
使用HTTPFoundation Session,我通过以下方式设置会话:
$session = new Session();
$session->set('session-id', $session->getId());
$session->set('timestamp', time());
然后返回,这是回复:
200 OK
Content-Type: application/json
{
"session-id": "1a69f956b8efc5ab465356e3257a3230",
"timestamp": 1487850859
}
现在,为了模拟来自不同实例的另一个响应,我使用了HttpRequester,但标题上的 session-id :
POST http://path.domain/api/url/
Content-Type: application/json
{
"key": "value",
"session-id": "1a69f956b8efc5ab465356e3257a3230"
}
通过拥有不同的请求实例,我期待Symfony将生成新的会话(新的时间戳值)。但对于我的情况,我想将会话ID 设置为请求标头中的那个,因此我可以访问上一个响应中返回的上一个时间戳。
我创建了一个内核事件,因此我可以拦截请求并检查请求是否具有 session-id ,然后进行会话设置。
// Get all PHP global variables
$request = Request::createFromGlobals();
// Check if the request
if ($request->headers->has('session-id')) {
$session = new Session();
$session->setId($request->headers->get('session-id'));
}
但是,如果我这样做,我会收到错误:
"error": {
"code": 500,
"message": "Internal Server Error",
"exception": [
{
"message": "Cannot change the ID of an active session",
"class": "LogicException",
...
我错过了什么?这可能吗?
答案 0 :(得分:0)