研究和调试的日子...... PHP会话var仍未保存

时间:2016-02-18 08:57:08

标签: php ajax

方案

  1. 用户登录(login.php)并点击"计算到期金额"按钮。
  2. 对calculate_checkout_total.php进行AJAX调用,该调用返回一个JSON对象,其中包含来自客户的应付总额(十进制)。此金额存储在$ _SESSION [' vendor_checkout_total']中。
  3. 向用户显示到期金额并点击付款按钮。 AJAX调用pay_checkout_total.php
  4. pay_checkout_total.php会检查$ _SESSION [' vendor_checkout_total']以获取应付总金额。
  5. 问题

    $ _ SESSION [' vendor_checkout_total']似乎永远不会被实际保存。 pay_checkout_total.php找不到此会话var(未定义索引)。

    是的,在访问/保存会话变量之前正在调用session_start()。

    所有其他会话变量(在其他PHP文件中)似乎都可以正确存储和访问。

    到目前为止我尝试了什么

    • 在login.php
    • 结束时调用exit()
    • 在calculate_checkout_total.php JSON对象中返回$ _SESSION,并验证是否存储了会话var。但是,当我检查/ var / lib / php5 / sessions时,没有任何会话文件包含$ _SESSION [' vendor_checkout_total']。我看到其他会话变量,但不是这个变量。好像会话var只存在于此页面中?
    • 尝试在calculate_checkout_total.php中设置不同的会话变量 - 仍未保存。
    • 验证两个PHP文件的session_id()相同。
    • 已验证包含PHPSESSID的Cookie已传递到请求标头。
    • 使用读写执行权限将/ var / lib / php5 / sessions的所有权从root更改为www-data。已验证此文件夹中的所有文件均属于www-data。
    • 我有以下PHP.ini设置
      

    session.save_path =" / var / lib / php5 / sessions"

         

    session.gc_probability合= 0

         

    session.cookie_path =" /"

         

    session.use_cookies = 1

    真诚地感谢任何帮助或想法。我不知道还有什么可以找。

    更新 我在脚本中包含了一个包含文件的session_write_close()。删除后,会话变量的行为符合预期。

1 个答案:

答案 0 :(得分:0)

(这是评论,不是答案,但有点长)。

听起来你正试图一次性调试整个应用程序。您应该做的第一件事是构建一个非常简单的测试平台来评估会话问题:

<?php
error_reporting(E_ALL);
session_start();

print "Iteration: " . ++$_SESSION['counter'];

找出你的会话没有按照你的预期行事的原因。

您说正在填充并正确返回Cookie。这意味着您没有向我们展示的代码中存在错误,或者由于配置/权限问题而未写入会话数据。

检查你的session.save_path(假设你使用的是默认处理程序)