【问题标题】:PHP: Access tokens stored in session variables lost on form submissionPHP:存储在会话变量中的访问令牌在表单提交时丢失
【发布时间】:2015-11-17 06:52:13
【问题描述】:

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

$_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()

【问题讨论】:

  • 您是否在每页顶部都调用session_start()

标签: php forms session post oauth


【解决方案1】:

你说你 echo session ,这意味着你已经把 session start 放在页面的开头。

检查您由会话变量填充的帖子输入值

【讨论】:

  • 是的,我可以回显存储在另一个会话变量中的帖子输入值。
  • 你检查目标页面了吗?会话开始也在那里吗?
  • 目标页面是同一页面本身。表单提交后页面刷新。
【解决方案2】:

您可以做的另一件事是,如果您不想调用 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 数组中。希望对您有所帮助。

【讨论】:

  • 当我尝试检查表单元素时,这是我从源代码中得到的:&lt;input type="hidden" name="o_token" value=""&gt; 用于我定义如下的文本字段:&lt;input type="hidden" name="o_token" value="&lt;?php echo $access_token['oauth_token']; ?&gt;" /&gt;。隐藏文本字段的值为空。
  • 你想回显$_SESSION['access_token']而不是$access_token['oauth_token']
  • 那也解决不了问题。隐藏文本字段的值仍然为空。
  • @ManasChaturvedi 您说“为了确保访问令牌确实存储在我的会话变量中,我尝试在提交表单之前在屏幕上回显它们,并且正如预期的那样,显示了令牌” ?????
  • 当我在提交表单之前尝试显示它们时,它们正在显示。但是,在提交表单后,这些变量就会丢失。
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 2013-03-08
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多