Php 如何更新会话变量
我正在使用Ajax创建一个多步骤表单,并希望根据表单字段的值更改显示的文本。我认为这样做的一个好方法是使用会话变量。如何告知会话使用新字段值进行更新?目前,会话似乎只存储初始值,而不存储对它的任何更新。因此,如果用户输入“John”作为名字,然后返回并将其更改为“Frank”,“John”是存储的名字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']
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'