2013-02-13 129 views
1

我在这里面临一个非常奇怪的问题。CodeIgniter和Joomla - 会话数据丢失

我有两个网站:**A** and **B**

**A** is the landing page (a micro website). **A** is running Joomla. 

**B** - payment pages. Coded with CodeIgniter. Uses session library and stores session data in a database. 

=================

方案: 用户访问登陆页面(网站A),选择一个服务包并点击购买。然后他被带到付款页面(网站B),并开始填写他的申请表。 一旦完成,他将被带到支付网关(由SecureTrading提供)并进行支付。付款成功后,用户将被带回网站B,在那里他必须完成他的应用程序的最后一点。

问题: 成功付款后,用户被重定向回网站,但由于某些原因,所有的会话数据都将丢失。

当发生这种情况: 会话数据丢失,只有当用户从登录页面(一个)的到来。 如果我一开始没有访问登陆页面就开始填写申请表,一切正常。

这是怎么发生的? 我该如何解决这个问题?

+0

清除会话表并执行您列出的步骤。当你到达会话数据丢失的地方时,检查会话表中的任何一个。 1)表是空的,2)表有一个条目,但会话数据是空的/无效的,3)现在有两个条目。报告结果。 – 2013-02-13 12:20:45

+0

现在有两个条目 - 其中一个具有正确的数据(以及主session_id),另一个在付款后添加到数据库中,除了新的session_id外,其中没有数据。 显然,由于某种原因我的会话被重置...... 这只发生在我访问外部网站的付款页面时。 Joomla与它无关。 – chuckfinley 2013-02-13 12:29:57

+0

你可以在你确定会话是否存在的地方发布你的代码,并且如果它没有通过检查就创建一个会话。这可能是你的罪魁祸首。系统没有正确地判断会话是否已经存在,因此它正在创建一个新的会话并因此覆盖用户的会话cookie,因此有效的cookie不再被发送到服务器以检索第一个/实际会话。您可能在多个地方有这样的问题代码,请考虑执行会话检查的所有地方。 – 2013-02-13 12:32:50

回答

2

确保您的application/config.php文件有以下设置中设置这个值:

$config['cookie_domain'] = ".mysite.com"; 

拿笔记领先.这表示该cookie访问的站点范围内的。这将确保可以从所有子域访问cookie。这里有更多关于cookie域如何工作的information。您应该始终设置此配置选项,因为它默认为空,因此将使用默认的cookie设置,在大多数设置中这不是开发人员需要的。