在PHP中使用会话ID创建而不实际发送会话ID

时间:2013-11-12 20:19:39

标签: php sessionid

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

  • 用户POST的用户名和哈希密码(通过HTTPS)至/sessions
  • /sessions以会话ID作为响应正文的一部分进行响应。
  • 用户通过将?session_id=[session_id]附加到网址来验证所有其他请求。

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

PHP中现有的会话功能已经做了很多这样的事情(ID生成和文件存储),但我无法弄清楚如何只使用这些部分而没有将会话ID作为cookie发送给用户

这可能吗?或者我是否需要实现自己的会话ID生成功能(任何提示?)和文件/数据库存储?

1 个答案:

答案 0 :(得分:1)

您可以禁用会话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