将表单数据存储为临时会话

时间:2012-08-27 21:21:27

标签: php session

我查看了Storing Form Data as a Session Variable,但没有人说过如果用户离开该表单后如何撤消会话。对我来说,一旦设置了会话,它就会不断设置(直到我假设退出)。因此,例如用户名字段将始终具有" test"如果我没有成功或成功提交表格" test"在它,然后只是去一些其他链接。这就是我所拥有的:

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

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

完成后,你总是可以取消设置()$ _SESSION ['temp_username']。

unset($_SESSION['temp_username'])

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

答案 3 :(得分:0)

我写了一些东西来解决这个问题。基本上,我将表单数据设置为会话变量。如果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语句在默认值和表单值之间切换,以便在初始加载和回发时设置表单值。