当iframe调用网站时,会话不起作用



我有第一个站点https://www.mydomain1.com我在其中使用PHP会话。没问题,一切都很好,当我从一页转到另一页时,我可以访问我的会话变量。

我有第二个网站https://www.mydomain1.com其中我通过iframe:显示了我的第一个网站的一部分

<iframe src = "https://www.mydomain1.com" width = "100%" frameborder = "0" style = "border: 0" allowfullscreen = "allowfullscreen" id = "frameLeonard"> </iframe>

奇怪的是,会话变量不再被识别。我甚至没有试图让我的第一个站点从第二个站点访问会话变量(这不是目标,它不起作用是正常的(,而是在第一个站点内运行第二个网站。

奇怪的是,一年前它还在工作。是否有任何升级可以解释这个问题?

提前感谢您的灯光!

现在我找到了原因,chrome显示了这种行为。在版本80(2020年2月(中;SameSite默认cookie";默认情况下启用,这意味着在iframe中包含外部页面(不同的域(将终止它们的会话。

为了防止这种情况,您可以禁用";SameSite默认cookie";在里面chrome://flags小心:这可能是一个安全问题(但现在解决了我的问题(

否则,如果使用PHP 7.3或更新版本,您可以在session_start():之前在PHP中添加以下ini_set()中的一个(或两个(

ini_set('session.cookie_samesite', 'None');
session_set_cookie_params(['samesite' => 'None']);

在这里您可以获得更多详细信息:https://blog.heroku.com/chrome-changes-samesite-cookie#prepare-for-cochrome-80更新

我建议您使用MySQL函数,

//通过img文件添加captcha记录。

$time = time();
$deltime = time()-1500;
$ip = $_SERVER['REMOTE_ADDR'];
$result = $conn->query("SELECT * FROM `captcha` WHERE `ip` = '" . $ip . "'");
if (($result) && ($result->num_rows >= 1))
{ 
$conn->query("UPDATE `captcha` SET `captcha` = '".$_SESSION["captcha"]."' WHERE `ip` = '".$ip."'");
}
else 
{

$conn->query("DELETE FROM `captcha` WHERE `time` < '".$deltime."'");

$sql = "INSERT INTO `captcha` (captcha, ip, time) VALUES ('".$_SESSION["captcha"]."', '".$ip."', '".$time."')";
if ($conn->query($sql) === TRUE) {
//echo "New record created successfully";
} else {
//echo "Error: " . $sql . "<br>" . $conn->error;
}
}

//在进程文件上匹配captcha代码

$ip = $_SERVER['REMOTE_ADDR'];
$result = $conn->query("SELECT * FROM `captcha` WHERE `ip` = '" . $ip . "'");
while ($row = $result->fetch_assoc())
{ 
$captcha = $row['captcha'];
}
if ($captcha == $_POST["access_token"]) { /* do anything */ }

这里也有同样的问题,但还没有解决方案。我做了几次测试。似乎只有当iFrame加载的内容经过SSL认证时才会发生。如果没有,那就完美了。也许这很有帮助。或者你找到解决方案了吗?

相关内容

  • 没有找到相关文章

最新更新