gpt4 book ai didi

PHP - 使用 session.use_trans_sid 时 session ID 发生变化

转载 作者:可可西里 更新时间:2023-11-01 12:37:57 27 4
gpt4 key购买 nike

我开发了一个使用基于 cookie 的 session 的 PHP web 应用程序,它运行良好 - 直到我意识到它在禁用了第三方 cookie 的浏览器中不起作用(因为脚本将被加载到另一个网站/域上的 iframe)。

所以我决定切换到基于 URL 的 session (我认为这将是安全的,因为脚本位于 iframe 中,不会有可见的 URL 供用户共享或添加书签等)。

但是,由于某种原因,自从我切换到基于域的 session 后,我的 Web 应用程序中的每个页面都使用了不同的 session ID。

这是我的代码...

ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
ini_set("session.use_trans_sid", 1);
ini_set("session.cache_limiter", "");
session_start();
echo "<p>Session ID: " . session_id() . "</p>"; // Test output

...这是在每个页面上调用的第一件事(我不知道以前的输出)。

我的 Web 应用程序的第一页包含一个表单,我看到所需的隐藏 session ID 输入已由 PHP 自动添加到其中:

<input type="hidden" name="PHPSESSID" value="m4jbeec47uplnf95ue2h244a02" />

但是下一页(表单提交到的页面)报告的 session ID 是

session ID:iiovfkrf3hesj1um5orasv7it6

此外,当我使用 https://(而不是 http://)加载第一个页面时,提交表单会导致同一页面重新加载(而不是加载下一页)。

我已经尝试过的:

ini_set("session.cookie_secure", 0);

ini_set("session.cookie_secure", 1);

ini_set('session.gc_maxlifetime', 30 * 60); // expires in 30 minutes

和(在脚本末尾)

session_write_close();

和删除

ini_set("session.cache_limiter", "");

来自 phpinfo() :

session.auto_start  Off Off
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.upload_progress.cleanup On On
session.upload_progress.enabled On On
session.upload_progress.freq 1% 1%
session.upload_progress.min_freq 1 1
session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefix upload_progress_ upload_progress_
session.use_cookies On On
session.use_only_cookies On On
session.use_strict_mode Off Off
session.use_trans_sid 0 0

有什么想法吗?

最佳答案

我认为问题一定是由于我的代码某处存在错误。我在下面创建了测试脚本,它按预期工作(在同一台服务器上):

url-session-test.php

<?php

$page_title = "URL Session Test (v11)";

ini_set("session.use_cookies", 0);
ini_set("session.use_only_cookies", 0);
ini_set("session.use_trans_sid", 1);
//ini_set("session.cache_limiter", "");
ini_set('session.gc_maxlifetime', 30 * 60); // expires in 30 minutes
session_start();
$session_id = session_id();

$is_new_session = !isset($_SESSION["existing"]);
$_SESSION["existing"] = true;
if ($is_new_session) {
$_SESSION["my_key"] = "MY PRIVATE KEY";
}
$my_session_key = $_SESSION["my_key"];

$timezone = $_SESSION["timezone"];
if ($timezone) {
date_default_timezone_set($timezone);
}

if ($_POST['PHPSESSID']) {
$session_id_received = $_POST['PHPSESSID'];
}
else {
$session_id_received = "";
}

?><!DOCTYPE html>
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<h1><?php echo $page_title; ?></h1>
<p>Is new session: <?php echo $is_new_session; ?></p>
<p>My session key: <?php echo $my_session_key; ?></p>
<p>Received session ID: <?php echo $session_id_received; ?></p>
<p>Actual session ID: <?php echo $session_id; ?></p>
<form method="POST">
<input type="submit" value="Click this form submit button to see how if the above session ID is received by the next page" />
</form>
<a href="url-session-test.php">Hover over this link to check the session ID parameter</a>
</body>
</html>

一旦我发现它就会发布实际的错误...

更新

问题是我使用的是 POST-Redirect-GET 模型,我没有将所需的 PHPSESSID 参数附加到 GET url!

关于PHP - 使用 session.use_trans_sid 时 session ID 发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084768/

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