在 PHP 中使用会话 ID 创建,而无需实际发送会话 ID


Using the session ID creation in PHP without actually sending the session ID

我正在创建一个不使用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