从支付提供商重定向后会话丢失

时间:2014-03-09 08:45:40

标签: php session-variables payment-processing

我们的一些客户遇到了他们丢失会话数据的奇怪情况。这总是发生在我们的付款专家ogone的重定向之后。流程如下:

  • 用户正在完成订单
  • 用户决定通过ogone付款。
  • 之后,用户将被重定向到应用程序的付款成功/错误处理程序。

在调试此问题时,我发现当用户从ogone重定向到应用程序时,会话数据会丢失。这仅在x个请求数量上发生一次。因此,当我在任何可能的浏览器中测试代码时,它似乎工作正常。我没有找到失败的付款和浏览器/付款方式/ ....之间的链接。

这是我的会话配置:

'session.name' => 'PHPSESSID',
'session.save_path' => '/var/www/app/data/session'
'session.gc_probability' => 1,
'session.gc_divisor' => 100,
'session.gc_maxlifetime' => 5400, // 90 min.
'session.cookie_lifetime' => 0,
'session.bug_compat_warn' => 'off'

会话ID也由URL中的查询参数传递。该ID在页面ogone重定向到。

中可用

是否有人可以帮我解决这个痛苦的问题?

1 个答案:

答案 0 :(得分:1)

查询参数中传递的会话ID弱于Session Fixation

您可以做的是将会话数据存储在数据库中,比如在第i行的某个表T中;然后将值i存储在cookie中。当用户返回站点时,从cookie中检索i,然后从数据库加载会话数据。

// Store the data in the database, in whatever form you choose
$id = last_insert_id(); // Get the ID of the row in which this information is stored

// Store the id in a cookie
setcookie("session_data_row_id", $id, time() + 3600 * 24);  /* expire in 1 day */

现在,您需要在需要时将数据从数据库中检索回会话

// Get the row id from the cookie
$id = $_COOKIE['session_data_row_id'];

// Use this ID and retrieve the data from the database

为什么网络存储而不是cookie存储所有数据?

  1. 将敏感数据存储在Cookie中是不明智的,因为XSS攻击可以获取所有Cookie
  2. Cookie为每个域提供4096字节的限制
  3. 更多资源:

    1. http://davidwalsh.name/php-cookies
    2. http://in3.php.net/setcookie
    3. Local Storage vs Cookies
    4. Keep $_SESSION alive with autorenewing counter