PHP:存储在会话变量中的访问令牌在表单提交时丢失


PHP: Access tokens stored in session variables lost on form submission

我已经在会话变量中存储了从Twitter OAuth提供程序获得的OAuth密钥和OAuth令牌密钥等某些凭据,如下所示:

$_SESSION['o_token'] = $access_token['oauth_token'];
$_SESSION['o_token_secret'] = $access_token['oauth_token_secret'];

为了确保访问令牌确实存储在会话变量中,我尝试在提交表单之前在屏幕上回显它们,正如预期的那样,显示了令牌。

现在,我有一个表单,在提交表单时,存储在会话变量中的访问令牌丢失了。当我在提交表单后尝试回显如下内容时:

if(isset($_POST['submitted']))
    {
        echo $_SESSION['o_token'];
    }

没有显示,因为存储在$_SESSION['o_token']中的值现在是空的。

而访问令牌数据存储在我的会话变量丢失表单提交后?

PS:为了确认只有访问令牌数据在表单提交时丢失,而不是其他会话变量数据,我尝试定义一个模拟会话变量:
$_SESSION['mock'] = "mock";

,然后在表单提交后尝试回显它:

if(isset($_POST['submitted']))
    {
        echo $_SESSION['mock'];
    }

上面的代码显示mock,这意味着只有存储在会话变量中的访问令牌数据丢失。

这里有什么问题吗?

编辑:是的,我在我的代码开始包括session_start()

你说你回声会话,这意味着你已经把会话开始在页面的开头。

检查由会话变量

填充的post输入值

你还可以通过表单传递令牌如果你不想调用session_start()当然如果它不会造成任何安全风险

<input type="hidden" name="acces_token" value="<?= $_SESSION['o_token']?>"/>
<input type="hidden" name="o_token_secret" value="<?= $_SESSION['o_token_secret']?>" />

值应该在$_POST数组中。