重定向后的会话集未保存在表单提交上

时间:2017-04-03 18:53:36

标签: php wordpress apache session mediatemple

我正在使用会话在表单上发送变量以安全地删除后端上的记录。一切正常:

  1. 我创建了记录列表,以及删除按钮作为表单。
  2. 在创建删除按钮时,我设置了一个会话,其中包括令牌和要删除的项目的ID。
  3. 当我单击删除按钮(提交表单)时,将在处理操作的php文件中调用该操作。我读取令牌,将其与表格中发送的令牌进行比较,从会话中检索要删除的项目的ID,删除该项目。
  4. 将用户重定向到上一页。
  5. 然而,在重定向之后,除非我在删除之前刷新页面,否则这不起作用。即使在重定向之后再次创建会话(我已经检查过它工作正常),当我再次提交删除表单时,会话不会持久保存到处理表单的文件。

    有没有人知道可能会发生什么?

    我如何设置会话:

    $token = SessionManager::setTokenForForm('delete-' . $row->id, $values);
    
    echo '<form method="post" action="' . FrontendConstants::$BASE_URL . FrontendConstants::$DELETE_RECORD_URL . '">';
    echo '  <input type="hidden" name="token" value="' . $token . '"/>';
    echo '    <input type="hidden" name="redirect_url" value="' . $fullRedirectUrl . '"/>';
    echo '    <input type="hidden" name="id" value="' . $row->id . '"/>';
    echo '    <input type="submit" class="btn btn-default" value="Delete"/>';
    echo ' </form>';
    

    函数setTokenForForm:

    public static function setTokenForForm($form, $values = null) {
            $token = uniqid();
            if (!isset($_SESSION)) {
                session_start();
            }
    
            $session = array();
    
            $session['token'] = $token;
    
            if ($values != null) {
                $session['values'] = $values;
            } else {
                $session['values'] = array();
            }
    
            $_SESSION[$form] = $session;
    
            return $token;
     }
    

    在delete.php上,这是表单调用的文件,在查阅会话并删除项目后,我重定向到上一页:

    header('Location: ' . $redirect_url);
    

0 个答案:

没有答案