0

奇怪的事情正在发生。我一直在我的本地机器上测试一个 Web 应用程序,它工作得非常好。会话正在完美处理。

最近,当我将应用程序推广到生产环境时,一切正常,除了一些会话变量没有在页面之间保存。

似乎我添加到应用程序中的所有新创建的会话变量都没有保存在页面之间,并且在进行更改之前已经存在的所有变量都保存在页面之间。

我在想也许这与php.ini安全设置或某些安全设置有关?让我难以解决的原因是页面之间丢失了一些但不是所有的会话。

第一页导航根据需要包含所有会话变量,10 个会话变量。在第一页上创建和保存的所有新变量在除第一页之外的任何页面上都变为空/空,并且 SESSION 变量的数量下降到 9。

我非常感谢有关导致此问题的原因以及如何解决此问题的任何建议!

注意:最后四个变量是新创建的,所有其他变量在新更改之前都已存在。

页面导航 1:

echo 'ID: ' . session_id() . ' <br/><br/>';
        echo 'SAVE PATH: ' . session_save_path() . ' <br/><br/>';
        var_dump($_SESSION);

输出

ID: 8rd3paua61caaqd09ahoc0km42

SAVE PATH: D:\php5\session

array(10) { ["termstamp"]=> int(1383577150) ["timestamp"]=> int(1383577150) ["tm"]=> int(1383577150) ["userid"]=> string(6) "153355" ["authenticated"]=> bool(true) ["auth"]=> bool(true) ["joinMeta"]=> string(0) "" ["selectMeta"]=> string(0) "" ["search_queryyy"]=> array(12) { [0]=> string(27) "sec.lastname LIKE '%smith%'" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" [4]=> string(0) "" [5]=> string(0) "" [6]=> string(0) "" [7]=> string(43) "sec.has_status != 99 && sec.has_status != 6" [8]=> string(0) "" [9]=> string(0) "" [10]=> string(0) "" [11]=> string(0) "" } ["testtttttt"]=> string(17) "SOMETHING INTO IT" }

页面导航 2 及更高版本:

echo 'ID: ' . session_id() . ' <br/><br/>';
        echo 'SAVE PATH: ' . session_save_path() . ' <br/><br/>';
        var_dump($_SESSION); 

输出:

ID: 8rd3paua61caaqd09ahoc0km42

SAVE PATH: D:\php5\session

array(10) { ["termstamp"]=> int(1383577150) ["timestamp"]=> int(1383577150) ["tm"]=> int(1383577150) ["userid"]=> string(6) "153355" ["authenticated"]=> bool(true) ["auth"]=> bool(true) ["joinMeta"]=> string(0) "" ["selectMeta"]=> string(0) "" ["search_queryyy"]=> NULL ["testtttttt"]=> string(17) "SOMETHING INTO IT" } 

提前致谢!

4

2 回答 2

0

您是否考虑将这些值存储在input type="hidden"字段中作为备份计划?

对此进行修改,也许这会将您推向正确的方向,看看哪里出了问题。

<?php
    foreach ($_SESSION as $key=>$value)
    {
?>
       <input type="hidden" name="<?php echo $key; ?>" value="<?php echo $value; ?>" />
<?php
    }
?>

注意:代码未经测试,可能无法正常工作,但你明白了......

于 2013-11-04T14:12:51.940 回答
0

如果您有会话变量在一个页面上而不在其他页面上工作,则意味着(很可能)您在其他页面上缺少session_start() 。

于 2013-11-04T14:15:24.603 回答