Php 如何更新会话变量

Php 如何更新会话变量,php,ajax,session-variables,multipartform-data,Php,Ajax,Session Variables,Multipartform Data,我正在使用Ajax创建一个多步骤表单,并希望根据表单字段的值更改显示的文本。我认为这样做的一个好方法是使用会话变量。如何告知会话使用新字段值进行更新?目前,会话似乎只存储初始值,而不存储对它的任何更新。因此,如果用户输入“John”作为名字,然后返回并将其更改为“Frank”,“John”是存储的名字 if (!isset($_SESSION)) { session_start(); $_SESSION['formStarted'] = true; $_SESSION['timestamp']

我正在使用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>
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);

如果要在页面之间创建持久会话,则需要在会话应应用到的每个脚本的开头调用
session\u start
,而不仅仅是第一个脚本


for
session\u start
表示,如果会话已经存在,则该函数将导致会话保持。

这就是$\u会话的工作方式。因为同一个变量可能在不同的页面上使用,并且正在处理中,所以更改值是不可接受的

在您的情况下,您正在尝试更新$\u会话['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();
?>

您可以像更新简单变量一样更新
$\u会话。
$\u SESSION
是一个全局变量,您可以在
SESSION\u start()声明之后访问它

当您想更改时,不需要
取消设置
会话
,因为您使用的是相同的
内存
地址

例如:

index.php

<?php 
   session_start();
   $_SESSION['key'] = 'firstValue';
<?php
   session_start();
   session_regenerate_id() // that's not required
   $_SESSION['key'] = 'newValue';
<?php
   session_start();
   echo $_SESSIOn['key'];

我不认为这是一个PHP问题。这看起来像是一个代码问题。在第6行发布提交请求的ajax代码,最好是$key和$\会话的一些var_导出的输出。您使用什么事件触发ajax代码?@Jim ajax代码由提交按钮触发。我正在使用一个手风琴,每个部分的表单都有不同的部分。
ajaxtest.php
看起来像什么?@Paystey我发布了ajax代码。@Zach谢谢。我确实在每一页的开头都有一个会话开始。问题似乎是,最初输入的值即使以后更改也会保持不变。您确定要在ajaxtest.php中设置
$\u SESSION['name']
?尝试清除浏览器cookies并重新提交表单。如果它是空的,那么表单没有设置该变量。另外,请尝试
var\u转储($\u会话)
查看整个会话状态。@Zach I执行了var\u转储($\u会话)。除非刷新页面,否则名称字段的信息似乎不会更新。有没有一种方法可以在不刷新页面的情况下强制更新会话?Ken,不是不添加一些AJAX调试,但我认为这不值得。出于调试目的,您可以添加类似于
$\u SESSION['a']=$\u GET['a']
的内容,并在更改URL中的
?a=blah
参数时验证会话变量是否更新。我一直在使用$\u POST,但出于测试目的,我可以尝试将内容更改为$\u GET。
<?php
   session_start();
   echo $_SESSIOn['key'];
index.php -> anotherpage.php -> checkpage.php // output 'newValue'