Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
帮助使PHP会话在脱离现场后保持不变_Php_Session - Fatal编程技术网

帮助使PHP会话在脱离现场后保持不变

帮助使PHP会话在脱离现场后保持不变,php,session,Php,Session,我们正在用PHP开发一个支付网关系统。我们使用会话来存储购物车数据。系统会将您从现场带到付款处理程序的站点,然后将您返回到您的站点。在大多数主机上,当我们回到我们的站点并且会话数据仍然存在时,我们没有任何问题。对于那些有问题的人,关闭PHP会话referer_检查在过去是有效的。我们真的不想把PHPSESSID作为GET变量,希望避免这种情况。我要寻找的是其他哪些服务器配置会导致会话被终止,以及可能存在的任何其他解决方法 谢谢你的帮助。我遇到了同样的问题,主要与cookie lifetime和c

我们正在用PHP开发一个支付网关系统。我们使用会话来存储购物车数据。系统会将您从现场带到付款处理程序的站点,然后将您返回到您的站点。在大多数主机上,当我们回到我们的站点并且会话数据仍然存在时,我们没有任何问题。对于那些有问题的人,关闭PHP会话referer_检查在过去是有效的。我们真的不想把PHPSESSID作为GET变量,希望避免这种情况。我要寻找的是其他哪些服务器配置会导致会话被终止,以及可能存在的任何其他解决方法


谢谢你的帮助。

我遇到了同样的问题,主要与cookie lifetime和cookie domain有关,例如,对于IE来说,www.example.org与example.org不一样。

我遇到了同样的问题,主要与cookie lifetime和cookie domain有关,对于IE来说,www.example.org与example.org不一样,例如。

使用基于cookie的会话有几种可能性:

  • cookie是为哪个域设置的?mysite.com和secure.mysite.com不一样
  • 对于给定的web主机,是否在所有web浏览器上都会出现此问题
  • 你什么时候打电话来
  • 您是否正在编写会话cookie并从同一PHP页面重定向到支付处理器?可能web主机没有发送正确的标题。我建议加载并检查浏览器中的会话cookie是否与服务器上的当前会话id匹配
  • 在有问题的web主机上运行
    phpinfo()
    时,主机是否执行
    会话。请参阅\u check
    是否实际具有所需的值
有很多可能性。以下是所有与会话相关的PHP运行时设置,其中许多可能会导致问题:


使用基于cookie的会话有几种可能性:

  • cookie是为哪个域设置的?mysite.com和secure.mysite.com不一样
  • 对于给定的web主机,是否在所有web浏览器上都会出现此问题
  • 你什么时候打电话来
  • 您是否正在编写会话cookie并从同一PHP页面重定向到支付处理器?可能web主机没有发送正确的标题。我建议加载并检查浏览器中的会话cookie是否与服务器上的当前会话id匹配
  • 在有问题的web主机上运行
    phpinfo()
    时,主机是否执行
    会话。请参阅\u check
    是否实际具有所需的值
有很多可能性。以下是所有与会话相关的PHP运行时设置,其中许多可能会导致问题:


这是PHP安全性的一个非常模糊的领域-如何持久化会话而不在url中公开cookie或会话id?不幸的是,唯一稍微安全的解决方案是使用cookie,但我将尝试解释一种使其尽可能安全的方法

在用户离开站点之前,您需要准备好数据库,以便在不需要再次提供登录详细信息的情况下接受它们-在用户表中创建两列-“key”和“timeout”

现在,当用户准备通过您的支付网关离开站点时,您需要更新他们在数据库中的记录—生成一个唯一的密钥来存储

$key = md5(uniqid(rand(), true));
在数据库中存储这些信息,并加上一个超时时间(比如说,一个小时或两个小时,甚至一整天,随你的便)。只要他们在指定的时间范围内返回并且能够生成正确的密钥,系统将继续识别用户,您就不必担心再次登录

现在我们需要设置一个具有相同密钥的cookie,比如说,它们的用户名的咸md5散列(以防万一)。确保给它的超时时间与您在数据库中给它们的记录的超时时间相同(您不希望有敏感信息的旧cookie永远存在)


一旦他们返回站点,抓取具有唯一ID和哈希用户名的cookie,并将其与数据库中的键/超时组合进行比较。如果他们匹配,一切都好。然后删除cookie。

这是PHP安全性的一个非常模糊的领域-如何持久化会话而不在url中公开cookie或会话id?不幸的是,唯一稍微安全的解决方案是使用cookie,但我将尝试解释一种使其尽可能安全的方法

在用户离开站点之前,您需要准备好数据库,以便在不需要再次提供登录详细信息的情况下接受它们-在用户表中创建两列-“key”和“timeout”

现在,当用户准备通过您的支付网关离开站点时,您需要更新他们在数据库中的记录—生成一个唯一的密钥来存储

$key = md5(uniqid(rand(), true));
在数据库中存储这些信息,并加上一个超时时间(比如说,一个小时或两个小时,甚至一整天,随你的便)。只要他们在指定的时间范围内返回并且能够生成正确的密钥,系统将继续识别用户,您就不必担心再次登录

现在我们需要设置一个具有相同密钥的cookie,比如说,它们的用户名的咸md5散列(以防万一)。确保给它的超时时间与您在数据库中给它们的记录的超时时间相同(您不希望有敏感信息的旧cookie永远存在)


一旦他们返回站点,抓取具有唯一ID和哈希用户名的cookie,并将其与数据库中的键/超时组合进行比较。如果他们匹配,一切都好。然后删除cookie。

无cookie无会话,只需使用作为附加参数或属性发送到支付系统的uniq id(通常tx id也可以),在返回页面url上编写一个函数,以识别接收到的uniq id并进行比较,如果为真,则为用户创建一个新会话。

无cookie无会话,只需使用作为附加参数或属性发送的uniq id
$string = $_SERVER['HTTP_USER_AGENT'];
$string .= 'GHYU&*%HHD#JSFHJJFD(*JFJ'; // any long value
        /* Add any other data that is consistent */
$fingerprint = md5($string);



if (isset($_SESSION['HTTP_USER_AGENT']))
    {
        if ($_SESSION['HTTP_USER_AGENT'] !== $fingerprint)
        {
            /* Prompt for password */
            session_destroy();
            header("Location:"."URL/PATH/TO/LOGIN");
        }
    }
else
    {   
        $_SESSION['HTTP_USER_AGENT'] = $fingerprint;
}