【发布时间】:2017-03-29 10:04:00
【问题描述】:
我正在开发一个 LiveCode Server CGI 系统,作为保险业务的客户门户网站,我的意思是客户将登录并能够查看有关其帐户的大量信息。他们将能够查看他们的保单历史、保险详情和下载保险证书等。
目前基本已经到位,客户端可以登录,系统连接到数据库并拉回他们的数据。
但是,我想在登录期间预加载大部分重要数据。为此,我将数据加载到 $_SESSION 中,这对于基本用户数据(公司名称等)非常有用。
只要我尝试在 $_SESSION 中存储一组数据,它就根本不起作用(例如,关于他们每个政策的数据)。如果我将这些数据存储在一个全局数组变量中,它对于加载的下一页可以正常工作,但它不会在会话的其余部分持续存在。
下面的代码用于从数据库中加载数据
//load client info
put $_SESSION ["username"] into var1
put "SELECT * FROM client WHERE client_number_display_text_c = :1" into tQuery
put revQueryDatabase(tDatabaseID, tQuery, "var1") into tCursor
put revDatabaseColumnNamed(tCursor, "_pk_client") into $_SESSION["pk_client"]
put revDatabaseColumnNamed(tCursor, "client_account_status") into $_SESSION["account_status"]
put revDatabaseColumnNamed(tCursor, "client_category_aec") into $_SESSION["category"]
put revDatabaseColumnNamed(tCursor, "client_display_name_c") into $_SESSION["display_name_c"]
//load policy info
put $_SESSION["pk_client"] into var1
put "SELECT * FROM policy WHERE " & quote & "_fk_client" & quote & " = :1" into tQuery
put revQueryDatabase(tDatabaseID, tQuery, "var1") into tCursor
if tCursor is an integer then
put 1 into i
put revDatabaseColumnNamed(tCursor, "_fk_broker") into $_SESSION["policies"][i]["fk_broker"]
put revDatabaseColumnNamed(tCursor, "_pk_policy") into $_SESSION["policies"][i]["pk_policy"]
put revDatabaseColumnNamed(tCursor, "policy_date_expiry_actual_aec") into $_SESSION["policies"][i]["actual_expiry_date"]
put revDatabaseColumnNamed(tCursor, "policy_date_inception_aec") into $_SESSION["policies"][i]["inception_date"]
put revDatabaseColumnNamed(tCursor, "policy_display_cover_products_c") into $_SESSION["policies"][i]["display_products_c"]
put revDatabaseColumnNamed(tCursor, "policy_total_price_inc_tax_admin_c") into $_SESSION["policies"][i]["total_price_inc_tax_admin_c"]
end if
(一旦我让这个位工作,我将使用一个循环来读取所有策略数据,因此是 'i' 变量)
当显示主屏幕时,我会使用代码
put "<tr>"
put "<td>" & $_SESSION["policies"][1]["display_products_c"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["inception_date"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["actual_expiry_date"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["total_price_inc_tax_admin_c"] & "</td>"
put "</tr>"
这只是显示一个空白表格行。我尝试将 $_SESSION 放入一个数组并使用 Combine 但我只是从嵌套数组中获取顶级数据而没有任何内容
作为测试,我尝试了以下代码
put "<tr>"
put "<td>" & $_SESSION["display_name_c"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["inception_date"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["actual_expiry_date"] & "</td>"
put "<td>" & $_SESSION["policies"][1]["total_price_inc_tax_admin_c"] & "</td>"
put "</tr>"
在这种情况下,客户的显示名称在第一列中显示正确的数据 - 所有其他列都是空白的。
我使用了完全相同的代码,但我只是使用 gUser(定义为全局 gUser)而不是 $_SESSION。当使用 gUser 代替 S_SESSION 时,所有数据都完全按预期显示 - 但不会持久化。
似乎 $_SESSION 无法存储嵌套数组。如果是这种情况,那么我将在 $_SESSION["policy_keys"] 中简单地存储一个键的文本列表(可能是 cr 分隔) - 然后在需要时使用 AJAX 动态加载数据。所以我知道有一些方法可以解决它,但我想在进行进一步更改之前我会先询问一下。
我在 Windows Server 2016 Datacenter 上使用 LiveCode Server 8.1.2
欢迎任何帮助和指导
【问题讨论】: