我已经查看了将表单数据存储为会话变量,但没有人说一旦用户离开该表单,如何撤消会话。对我来说,一旦设置了会话,它就会不断设置(我想直到注销)。因此,例如,如果我不成功或成功提交带有“test”的表单然后转到其他一些链接,则用户名字段将始终包含“test”。这是我所拥有的:
$_SESSION['temp_username'] = $_POST['username'];
我已经查看了将表单数据存储为会话变量,但没有人说一旦用户离开该表单,如何撤消会话。对我来说,一旦设置了会话,它就会不断设置(我想直到注销)。因此,例如,如果我不成功或成功提交带有“test”的表单然后转到其他一些链接,则用户名字段将始终包含“test”。这是我所拥有的:
$_SESSION['temp_username'] = $_POST['username'];
只需在不需要时清除会话数据。你可以unset
对你的临时变量做一个。
但出于同样的原因,我认为将表单存储更深一层会更好:
$_SESSION['formdata'] = $_POST; // Save the form
然后您可以检索username
为$_SESSION['formdata']['username']
或unset
$_SESSION['formdata']
。
您可以使用$_SESSION['temp_username'] = null
, (或其他默认值)或unset()
.
一旦你完成它,你总是可以 unset() $_SESSION['temp_username'] 。
unset($_SESSION['temp_username'])
或者您可以调用 session_unset() 来清除所有会话数据。
我写了一些东西来解决这个问题。基本上,我将表单数据设置为会话变量。如果 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 语句在默认值和表单值之间切换以在初始加载和回发时设置表单值的表单的简写。