【问题标题】:Troubles with a PHP session variable after form submission表单提交后 PHP 会话变量出现问题
【发布时间】:2011-03-04 05:57:00
【问题描述】:

我正在为我提交的 HTML 表单设置一个带有成功消息的 PHP 会话变量。如果没有表单错误,我会重定向到同一页面(使用 header())并显示来自会话变量的消息。直到这里一切都很好,但是如果我在提交后再次访问该页面,消息仍然存在。是不是只能在我提交成功后重定向时才出现?

我的 form.php 代码如下所示:

if (isset($_POST['submit'])) {
 // some form processing here
 if (count($errors) == 0) {
   // some data saving here
   $_SESSION['status'] = 'Thank you for submitting the form';
   header('Location: /form.php');
}

现在是我的模板文件:

{if isset($smarty.session.status)} 
  <p><strong>{$smarty.session.status)</strong></p> 
{/if}

<!-- form html code goes here -->

谢谢。

【问题讨论】:

    标签: php session


    【解决方案1】:

    销毁会话:

    将您的代码更改为如下所示

    if(isset($_SESSION['sentData'])
    {
    echo "Your message";
    
    //This
    session_destroy();
    //or this
    unset($_SESSION['sentData']);
    }
    

    编辑:

    其实没有,把这个放在form.php/你的模板文件的末尾/你显示完信息之后:

    unset($_SESSION['status']);
    

    【讨论】:

      【解决方案2】:

      在显示消息之前,您可以检查消息是否为空。如果它不为空,则显示消息,然后立即显式清空会话变量,以便下次前面的检查不会显示消息。

      希望我理解你的问题:)

      【讨论】:

        【解决方案3】:

        显示消息后仅清除会话变量就足够了吗?

        这似乎是最直接的解决方案。您还可以:

        A) 检查 $_SERVER 变量中包含哪些信息,以尝试检测用户是如何到达该页面的,仅在发生故障时才显示消息。

        B) 让重定向包含一个查询字符串变量(例如 '?messages=1'),在显示会话消息之前使用 $_GET 检查该变量。


        编辑:我认为操作顺序是:

        1) 表单提交 2)如果没有错误,在会话中设置消息 3) 重定向 4) 重定向后显示消息

        我是说添加第 5 步:在消息显示后删除消息。就像你正在做的那样回显消息,但然后在回显之后添加代码以删除或清除会话变量。


        编辑 2: 啊,我现在明白了...

        我很好奇您是否应该直接从模板文件中引用会话变量。将它作为由调用模板的 PHP 设置的模板参数传递会更好吗?这使您能够将会话管理与显示分开,这可能最符合您的利益。

        【讨论】:

        • 我认为我不能这样做,因为我正在设置消息然后重定向。
        • 我不想使用任何 $_GET 变量。
        • 嗯,从上面的代码可以看出,我显示消息后无法进行任何操作。
        • 我听到了——我也不会使用 $_GET 解决方案,但我想我会提到它以防万一。我在编辑行之后所做的澄清呢?如果我正确理解您的情况,那应该可以解决问题...您设置消息,重定向,显示它,然后取消设置消息。
        • 我可以取消它的唯一方法是在模板文件中。我没有看到任何其他方式。
        猜你喜欢
        • 2016-08-18
        • 2013-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多