gpt4 book ai didi

POST 后 PHP session_id() 发生变化

转载 作者:行者123 更新时间:2023-12-02 05:17:03 25 4
gpt4 key购买 nike

我的生产服务器上出现了一个奇怪的情况。但是,在我本地的开发环境中这不是问题。这是一个测试脚本,我可以用它来重现问题:

<?php

session_start();

$_SESSION['test'] = 'test';

echo 'session_id(): '.session_id();

session_write_close();

?>

<form method="POST">
<input type="submit" value="Post to self" />
</form>

如果我在浏览器中加载此页面并刷新页面 (CTRL+R),我每次都会看到相同的 session_id() 值。

但是,如果我随后点击提交按钮,我会得到两种不同的结果:

  • 开发:相同的 session_id() 值(预期结果)。
  • 生产:不同 session_id() 值。

此外,在生产服务器上,如果我再次重新加载页面,我会得到原始 session_id() 值。

如何让生产服务器保留 session_id() 值?任何建议将不胜感激。

谢谢!

来自评论的详细信息:在我发布的基本示例中,它是这样的:

array(5) { 
["lifetime"]=> int(0)
["path"]=> string(1) "/"
["domain"]=> string(0) ""
["secure"]=> bool(false)
["httponly"]=> bool(false)
}

在实际的生产代码中是这样的:

array(5) { 
["lifetime"]=> int(0)
["path"]=> string(1) "/"
["domain"]=> string(0) ""
["secure"]=> bool(true)
["httponly"]=> bool(true)
}

(我在生产中使用 HTTPS)。

最佳答案

最安全的方法是告诉 PHP 使用 cookie。要求用户允许 session cookie。

session_name(SESSION_NAME);

// PHP 5.2+ Prevent x-domain cookie sess theft. Dont let Client scripts see cookie
$HTTPONLY = 1; // 0 or 1;

if (function_exists('session_set_cookie_params'))
{
session_set_cookie_params(3600, '/', '.domain.com', 0, $HTTPONLY);
} elseif (function_exists('ini_set'))
{
ini_set('session.cookie_lifetime', 3600);
ini_set('session.cookie_path', '/');
ini_set('session.cookie_domain', '.domain.com');

ini_set('session.cookie_httponly', $HTTPONLY);
}

您也可以通过表单变量继续传递 SESSION_ID,但这并不安全。

关于POST 后 PHP session_id() 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com