【问题标题】:$_SESSION is empty when calling an api rendered with React调用 React 渲染的 api 时 $_SESSION 为空
【发布时间】:2017-04-17 20:31:56
【问题描述】:

上下文: 我有一个用 React 渲染的 api。当我登录并进入管理页面时,我只想看到我自己的内容,由我创建,并且只有我自己。为此,我必须检查我的 $_SESSION['user_id'] 是否与数据库中的 publisher_id 匹配。该 api 允许登录用户创建/删除/编辑他的帖子。 api的结构是:

  1. post.php,我们在其中创建了一个名为 Post 的类,其中包含多种方法(创建、编辑等)。
  2. create.php 、 edit.php 、 read.php 等,我们在其中创建一个 Post 对象并调用我们需要的函数来执行所需的操作。

后者然后在 React 中称为 Create.js 的组件之一中调用,然后将在封装在其他组件中后呈现。

$_SESSION['user_id'] 在 React 完成渲染我们所有的帖子之前是不存在的。

当我在 content.php 页面上的 React 容器之前调用 echo $_SESSION['user_id'] 时,user_id 将正确显示。 (我在页面顶部使用session.start()

<?php
echo $_SESSION['user_id']; // works

//Container for our React component.When calling the api inside the 
//component, $_SESSION['user_id'] is empty
echo "div id='app'></div>";


echo $_SESSION['user_id']; //works again, $_SESSION['user_id'] is the same as before

问题: 当 React 从我的数据库中呈现内容时,如果在我的 SQL 查询中我写“... WHERE p.publisher_id=" . $_SESSION['user_id'] .”...“这意味着 $_SESSION['user_id'] 不再存在,则不会显示任何内容。

关于如何修复它的任何建议?

【问题讨论】:

    标签: javascript php session reactjs


    【解决方案1】:

    尝试添加 session_start();在该 div 中,或者如果这不起作用,请执行 define('_SESSION', $_SESSION);

    【讨论】:

    • 我已经尝试过您的建议,但它不起作用。问题是,我已经在页面顶部调用了 session_start(),所以它会自动在整个页面中可用。
    【解决方案2】:

    我已经找到了问题的原因和解决方案。他们在这里:

    原因:调用api时session变量不可用。在那里开一个会话也无济于事。原因可能是因为 api .php 文件从未用于显示任何 html。

    解决方案:创建一个名为 User 的新类,并为其提供 get_user_id 函数,该函数将返回以下内容: return json_encode($variableinwhichyousavedsession); 然后转到必须执行 4 个 CRUD 函数中的任何一个的反应类,在 componentDidMount 中使用 $.get("filename.php" , function { ... )。确保使用 json.parse 获取会话 ID 并将其保存到状态。这样你就可以使用 session id 进行操作了。

    我遇到的一个问题是您只能在发送一些输入或按下按钮时使用 $.post。我需要做的是在我加载页面时调用它。如果我找到替代方案或答案,我将对此进行编辑。

    编辑:在我的 api 中处理 $_SESSION 时,我似乎做错了什么。我已更正它并执行了以下操作:

    $product->publisher_id = $_SESSION['user_id'];
    

    这几乎解决了所有问题。

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 2019-02-20
      • 2019-06-26
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多