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

Php 将表单数据存储为临时会话,php,session,Php,Session,我已经看过了,但是没有人说过在用户离开表单后如何撤消会话。对我来说,一旦设置了会话,我想它会一直设置到注销为止。因此,用户名字段,例如,将始终有测试,如果我没有成功或成功地提交了测试的形式,在它,然后只是去一些其他链接。以下是我得到的: $_SESSION['temp_username'] = $_POST['username']; 您可以使用$\u SESSION['temp\u username']=null,或其他一些默认值或unset。您可以使用$\u SESSION['temp\u

我已经看过了,但是没有人说过在用户离开表单后如何撤消会话。对我来说,一旦设置了会话,我想它会一直设置到注销为止。因此,用户名字段,例如,将始终有测试,如果我没有成功或成功地提交了测试的形式,在它,然后只是去一些其他链接。以下是我得到的:

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

您可以使用$\u SESSION['temp\u username']=null,或其他一些默认值或unset。

您可以使用$\u SESSION['temp\u username']=null,或其他一些默认值或unset。

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

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

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

然后,您可以将用户名检索为$\u会话['formdata']['username']或取消设置$\u会话['formdata']。

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

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

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

然后,您可以将用户名检索为$_会话['formdata']['username']或取消设置$_会话['formdata']。

一旦完成$_会话['temp_username'],您就可以取消设置它

unset($_SESSION['temp_username'])

或者,您可以调用session\u unset来清除所有会话数据。

您可以在完成$u会话['temp\u username']后随时取消其设置

unset($_SESSION['temp_username'])

或者您可以调用session\u unset来清除所有会话数据。

我写了一些东西来解决这个问题。基本上,我将表单数据设置为会话变量。如果HTTP referer与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";


请注意,这样可以很好地简化表单,您不必测试索引,也不用使用if语句在默认值和表单值之间切换,以设置初始加载和回发时的表单值。

我写了一些东西来解决这个问题。基本上,我将表单数据设置为会话变量。如果HTTP referer与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";


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

太好了,谢谢。但是,我应该什么时候取消它?我如何确定用户何时离开表单页面?您可以使用计时器-在给定的秒数后,formdata被发送到data heaven-或者您可以将其留在原来的位置:毕竟,其他页面为什么要为$u会话['formdata']而烦恼?重要的是不要污染基本$\u会话数据;如果条件合适,您只需设置,例如,$\u SESSION['is\u Administrator'],太好了,谢谢。但是,我应该什么时候取消它?我如何确定用户何时离开表单页面?您可以使用计时器-在给定的秒数后,formdata被发送到data heaven-或者您可以将其留在原来的位置:毕竟,其他页面为什么要为$u会话['formdata']而烦恼?重要的是不要污染基本$\u会话数据;如果条件正确,您只需设置,例如,$\u SESSION['is\u Administrator']。