1

好的,所以我不太明白如何做到这一点,但这就是我想要做的。我需要更新在网站上多个地方使用的 SESSION。我使用 ajax 执行此操作,但是当我更改 SESSION 时,它在网站中与 ajax 调用之前保持相同。这是一个例子:

索引.php

<?php
session_start();
?>

<script>
function sessionUpdate()
{ 
//Do a get ajax call that send the 2 parameters to updateSession.php
}
</script>

<?php
$_SESSION['foo'] = "foo"; 
$_SESSION['bar'] = "bar"; 

echo"<div>";
echo"<p  onclick="sessionUpdate()>Update Session</p>";

echo"{$_SESSION['foo']} {$_SESSION['bar']}";
echo"</div>";
?>

更新会话.php

<?php
session_start();

$_SESSION['foo'] = "new foo"; 
$_SESSION['bar'] = "new bar";
?>

现在,整个站点都使用了会话,所以我不能只用 innerHTML=data.responseText; 替换示例 div 中来自 ajax 调用的信息;就在那个地方。无论如何,当我这样做时, foo 和 bar 会话的回声不会改变,它们只是静态变量,如果不重新加载页面就无法更改,还是有什么问题?

4

1 回答 1

2

据我了解,您打开index.php并且示例 div 包含会话变量的默认值(在您的示例中为“foo bar”)。单击更新会话后,innerHTML=data.responseText您可以看到更新的会话值(根据示例为“new foo new bar”)。但是在您重新加载 index.php 后 - 它再次显示“foo bar”。根据您的代码,您不检查是否应该设置默认会话变量。尝试在你的 index.php 中替换

<?php
$_SESSION['foo'] = "foo"; 
$_SESSION['bar'] = "bar"; 

echo"<div>";

<?php
if(!isset($_SESSION['foo']))
   $_SESSION['foo'] = "foo"; 
if(!isset($_SESSION['bar']))
   $_SESSION['bar'] = "bar"; 

echo"<div>";

更新的代码将检查是否设置了会话变量(用户第一次打开 index.php)。一旦未设置 - 将分配默认值,但一旦完成,它将不会覆盖任何未来的更改(因此,在 ajax 调用 foo 和 bar 变量将被设置并且您的代码不会重写其值)

于 2012-12-27T18:58:35.137 回答