我正在使用Ajax创建一个多步骤表单,并希望根据表单字段的值更改显示的文本。我认为这样做的好方法是使用会话变量。如何使用新字段值告知会话更新?目前,会话似乎只存储初始值,但不存储任何更新。因此,如果用户输入“John”作为名字,然后又返回并将其更改为“Frank”,则“John”是存储的名称。
if (!isset($_SESSION)) {
session_start();
$_SESSION['formStarted'] = true;
$_SESSION['timestamp'] = date("M d Y H:i:s");
$_SESSION[$key] = $value;
<p>Your name begins with the letter <?php if ($_SESSION['name'] =='Frank')
{echo 'F';}?><p>
jQuery的:
$("#form").validate({
//...
submitHandler: function(form) {
//...
$(form).ajaxSubmit({
type: "POST",
data: {
name : $('#name').val(),
//...
},
dataType: 'json',
url: '../ajaxtest.php',
error: function() {alert("There was an error processing this page.");},
success:
function(data) {
$('#output1').html(data.message.join(' ')).show(500);
$('#ouput1').append(data);
//...
ajaxtest.php:
session_start();
$expected = array(
'name'=>'string',
//...
);
//...
$return['message']=array();
if(!empty($_POST['name'])){
$return['message'][] = '' . htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8');
}
//...
echo json_encode($return);
答案 0 :(得分:0)
如果要在页面之间创建持久会话,则需要在会话应该应用的每个脚本的开头调用session_start
,而不仅仅是第一个。{1}}。
session_start
的{{3}}表示如果会话已存在,该功能将导致会话保持不变。
答案 1 :(得分:0)
这就是$ _SESSION应该如何运作。因为相同的变量可能在不同的页面上使用,并且处理不当,因此更改值将是不可接受的。
在您的情况下,您正在尝试更新$ _SESSION ['name']并且需要保持所有其他会话值不变。可能的解决方案是
<?php
session_start();
unset($_SESSION['name']);//remove $_SESSION['name']
session_regenerate_id();//Copies all other session variables on to new id
$_SESSION["name"] = $newValue;//Create new session variable 'name'.
session_write_close();
?>
答案 2 :(得分:0)
您可以像更新简单变量一样更新$_SESSION
。 $_SESSION
是全局变量,您可以在session_start()
声明后访问它。
由于您在同一unset
地址工作,因此您需要更改session
memory
。
例如:
<强>的index.php 强>
<?php
session_start();
$_SESSION['key'] = 'firstValue';
<强> anotherpage.php 强>
<?php
session_start();
session_regenerate_id() // that's not required
$_SESSION['key'] = 'newValue';
<强> checkpage.php 强>
<?php
session_start();
echo $_SESSIOn['key'];
<强>导航强>
index.php -> anotherpage.php -> checkpage.php // output 'newValue'