1

我正在创建一个不使用 cookie 的 Web 服务(试图成为 RESTful)。我的身份验证方案如下。

  • 用户POST的用户名和散列密码(通过 HTTPS)到/sessions.
  • /sessions使用会话 ID 作为响应正文的一部分进行响应。
  • 用户通过附加?session_id=[session_id]到 URL 来验证所有进一步的请求。

在实现这一点时,我想创建一个会话 ID,将其存储在某个地方(文件或数据库),然后手动插入会话 ID 作为响应正文的一部分。

PHP 中现有的会话函数已经做了很多这样的事情(ID 生成和文件存储),但我不知道如何只使用这些部分而不将会话 ID 作为 cookie 发送给用户。

这可能吗?还是我需要实现自己的会话 ID 生成功能(有什么提示?)和文件/数据库存储?

4

1 回答 1

2

您可以禁用会话 cookie 的 ini 设置。

ini_set('session.use_cookies', '0');
session_id($your_session_token);
session_start();

例子:

身份验证 api - .../sessions/

...
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
于 2013-11-12T20:43:50.420 回答