【问题标题】:Storing form data as a temporary session将表单数据存储为临时会话
【发布时间】:2012-08-27 21:21:26
【问题描述】:

我查看了Storing Form Data as a Session Variable,但没有人说一旦用户离开该表单,如何撤消会话。对我来说,一旦设置了会话,它就会不断设置(我想直到注销)。因此,如果我不成功或成功提交带有“test”的表单然后转到其他一些链接,则 Username 字段将始终包含“test”。这是我得到的:

$_SESSION['temp_username'] = $_POST['username'];

【问题讨论】:

    标签: php session


    【解决方案1】:

    只在不需要时清除会话数据。您可以对临时变量执行unset

    但出于同样的原因,我认为将表单存储更深一层会更好:

    $_SESSION['formdata'] = $_POST; // Save the form
    

    然后您可以将username 检索为$_SESSION['formdata']['username']unset $_SESSION['formdata']

    【讨论】:

    • 太好了,谢谢。但是,我应该什么时候取消它?如何确定用户何时离开表单页面?
    • 您可以使用计时器 - 在给定的秒数之后,formdata 被发送到数据天堂 - 或者您可以将它留在原处:为什么其他页面应该在之后打扰 $_SESSION['formdata']全部?重要的是不要污染基础$_SESSION数据;如果条件合适,您只会设置,例如$_SESSION['is_Administrator']
    【解决方案2】:

    您可以使用$_SESSION['temp_username'] = null,(或其他默认值)或unset()

    【讨论】:

      【解决方案3】:

      一旦你完成它,你总是可以 unset() $_SESSION['temp_username'] 。

      unset($_SESSION['temp_username'])
      

      或者您可以调用 session_unset() 来清除所有会话数据。

      【讨论】:

        【解决方案4】:

        我写了一些东西来解决这个问题。基本上,我将表单数据设置为会话变量。如果 HTTP 引用者与 PHP 脚本的名称不同,会话变量会将其重置为新数组。否则,它将新数据合并到现有表单数据中。该脚本还允许您设置默认值,并清理输入。

        您可能会更改它以擦除或取消设置会话值,但这对我有用。

        $form = array();
        
        if(isset($_SESSION['form']) && isset($_SERVER['HTTP_REFERER']) && strrpos($_SERVER['HTTP_REFERER'], $_SERVER['SCRIPT_NAME']) !== false) {
            $form = $_SESSION['form'];
        }
        
        if(isset($_SESSION['defaults']) && is_array($_SESSION['defaults'])) {
            $defaults = $_SESSION['defaults'];
            unset($_SESSION['defaults']);
        }
        else {
            $defaults = array();
        }
        function addValues($arr, &$form) {
            foreach($arr as $key=>$value) {
                $form[$key] = mysql_real_escape_string(strip_tags(stripslashes($value)));
            }
        }
        if(sizeof($_POST) > 0) {
            addValues($_POST, $form);
        }
        if(sizeof($_GET) > 0) {
            addValues($_GET, $form);
        }
        $_SESSION['form'] = array_merge($defaults, $form);
        

        用法:

        $_SESSION['defaults'] = array(
            'button'=>'first'
        );
        include_once "formdata.php";
        

        ...

        <form>
            <p>Form data for button (always a valid index): <?php echo $_SESSION['form']['button'] ?></p>
            <button value="test" name="button" type="submit">Test</button>
        </form>
        

        请注意,这允许您不必测试索引并使用 if 语句在默认值和表单值之间切换以在初始加载和回发时设置表单值的表单的简写。

        【讨论】:

          猜你喜欢
          • 2011-04-17
          • 2021-02-01
          • 2021-12-21
          • 2020-12-27
          • 2012-03-18
          • 1970-01-01
          • 2014-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多