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

在PHP中使用会话ID创建而不实际发送会话ID,php,sessionid,Php,Sessionid,我正在创建一个不使用cookie的web服务(尝试RESTful)。我的身份验证方案如下 用户将s用户名和哈希密码(通过HTTPS)发布到/sessions /sessions以会话ID作为响应正文的一部分进行响应 用户通过向URL追加?会话id=[session\u id]来验证所有进一步的请求 在实现此功能时,我希望创建一个会话ID,将其存储在某个位置(文件或数据库),然后手动将会话ID作为响应主体的一部分插入 PHP中现有的会话函数已经做了很多这方面的工作(ID生成和文件存储),但我不

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

  • 用户
    s用户名和哈希密码(通过HTTPS)发布到
    /sessions
  • /sessions
    以会话ID作为响应正文的一部分进行响应
  • 用户通过向URL追加
    ?会话id=[session\u id]
    来验证所有进一步的请求
在实现此功能时,我希望创建一个会话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\u other\u service\u url/?session\u id=[session\u 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

URL中的会话ID通常不是一个好主意。为这样一个url添加书签,然后共享它,这样每个人都可以访问该会话。此外,会话往往会过期,当链接没有自己的错误时,为显式会话添加书签只会使USR感到困惑。默认情况下,PHP使用cookie进行会话管理。可以将PHP设置为使用查询字符串参数。实际上,查看自定义会话处理程序可能会做得更好。请参阅@MarcB,它不打算被最终用户看到,它是一个提供API的web服务,因此不应该有任何书签。@MikeW看起来使用自定义会话保存处理程序可以覆盖希望从PHP保留的功能,并且不允许我覆盖我想要更改的功能。作为cookie或响应主体:如果使用会话,它不是RESTful的。但是,这不是宗教信仰,所以如果你决定打破REST的“URL总是提供对相同资源的访问”部分,我看不出使用cookies会使情况变得更糟。这设置了当前会话ID。我仍然希望使用PHP的会话ID生成。我相信将其设置为不发送cookies仍会导致它使用查询字符串参数。它只能使用查询字符串参数来加载会话(据我所知,这是您想要的)。如果不提供ID,它将从查询字符串(如果有)中读取ID,或者生成一个新的ID。如果要获取ID(新生成或未生成),请使用
session\u ID()
。如果您想强制它创建一个新的会话,请使用
session\u regenate\u id
。啊,我明白了。是的,这正是我想要的。谢谢