我有一个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,否则它不起作用。为什么呢?
答案 0 :(得分:1)
这是因为较新版本的PHP对session.use_only_cookies
的默认值为1,必须将其设置为“0”才能让PHP从$_GET
和$_POST
获取会话ID
答案 1 :(得分:0)
你必须先开始会议。
答案 2 :(得分:0)
我认为session_name()
更合适。搞砸身份证可能会有问题。