PHP会话和传递会话ID

时间:2010-08-31 19:00:59

标签: php session

我有一个API,我在调用之间来回传递会话ID。我这样设置了会话:

// start API session
session_name('apikey');
session_id($data['apikey']); // required to link session
session_start();

虽然我命名了我的会话并使用名称通过GET和POST传递会话ID,但PHP不会自动恢复该会话。它总是创建一个新的,除非我设置显式设置会话ID。

我在www.php.net上发现了一些旧的用户评论,除非会话ID是第一个参数,PHP不会自动设置它。这看起来很奇怪,但即使我打电话试过它仍然无效:rest_services.php?apikey=sdr6d3subaofcav53cpf71j4v3&q=testing

我已经使用PHP多年了,但是当我命名会话并相应地传递它的密钥时,为什么我需要用session_id()显式设置会话时有点困惑。

更新

似乎我不清楚。我的问题是,当我使用会话名称session_id()apikey$_GET传递ID时,为什么要设置会话ID为$_POST。从理论上讲,当禁用cookie时,这与PHP的SID没有什么不同。但对我来说,除非我明确设置会话ID,否则它不起作用。为什么呢?

3 个答案:

答案 0 :(得分:1)

这是因为较新版本的PHP对session.use_only_cookies的默认值为1,必须将其设置为“0”才能让PHP从$_GET$_POST获取会话ID

答案 1 :(得分:0)

你必须先开始会议。

答案 2 :(得分:0)

我认为session_name()更合适。搞砸身份证可能会有问题。