我查看了Storing Form Data as a Session Variable,但没有人说过如果用户离开该表单后如何撤消会话。对我来说,一旦设置了会话,它就会不断设置(直到我假设退出)。因此,例如用户名字段将始终具有" test"如果我没有成功或成功提交表格" test"在它,然后只是去一些其他链接。这就是我所拥有的:
$_SESSION['temp_username'] = $_POST['username'];
答案 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语句在默认值和表单值之间切换,以便在初始加载和回发时设置表单值。