使用ajax更改会话变量

时间:2012-12-27 18:25:40

标签: php ajax session

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

的index.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>";
?>

updateSession.php

<?php
session_start();

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

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

1 个答案:

答案 0 :(得分:2)

据我所知,你打开index.php,示例div包含会话变量的默认值(在你的例子中是'foo bar')。单击“更新会话”后,执行innerHTML=data.responseText可以查看更新的会话值(根据示例,“新foo新栏”)。但是在你重新加载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变量并且您的代码不会重写其值之后)