我正在创建一个不使用cookie的Web服务(试图成为RESTful)。我的身份验证方案如下。
- 用户
POST
用户名和散列密码(通过HTTPS)/sessions
。 -
/sessions
使用会话 ID 作为响应正文的一部分进行响应。 - 用户通过将
?session_id=[session_id]
附加到 URL 来验证所有进一步的请求。
实现这一点时,我想创建一个会话 ID,将其存储在某个地方(文件或数据库),然后手动插入会话 ID 作为响应正文的一部分。
PHP 中现有的会话函数已经做了很多这样的工作(ID 生成和文件存储),但我无法弄清楚如何只使用这些部分而不将会话 ID 作为 cookie 发送给用户。
这可能吗?还是我需要实现自己的会话ID生成功能(任何提示?)和文件/数据库存储?
您可以禁用会话 Cookie 的 ini 设置。
ini_set('session.use_cookies', '0');
session_id($your_session_token);
session_start();
例:
身份验证 API - .../会话/
...
check username/password ... other things
...
ini_set('session.use_cookies', '0');
session_start();
$_SESSION['user_stuff'] = $stuff;
$_SESSION['other_things'] = $things;
...
print session_id() along with whatever else is needed in the response body
实际服务 - .../some_other_service_url/?session_id=[session_id]
ini_set('session.use_cookies', '0');
session_id($_GET['session_id']);//I'm not sure where PHP will look for it by default and I'm too lazy to check, so I'm making sure its $_GET['session_id']
session_start();
if(!$_SESSION['user_stuff']) {
session token is missing, invalid or expired. the client needs to reauthenticate
}
do some useful things