从 iframe 到 ajax 的会话

Posted

技术标签:

【中文标题】从 iframe 到 ajax 的会话【英文标题】:Session from iframe to ajax 【发布时间】:2016-06-02 12:21:56 【问题描述】:

当我从域中的 iframe 创建会话,然后尝试从另一个 iframe 访问会话时它工作正常,但当我尝试通过 ajax 访问会话时它不起作用?


示例:

网站(iframe.php):

<?php 
header("Access-Control-Allow-Origin: *");
session_start();
if(isset($_POST['session']))
    $_SESSION['session'] = $_POST['session'];
    echo "created session";
else if(isset($_GET['want']))
    //for ajax request
    die($_SESSION['session']);

?>
<form action="iframe.php" method="post">
SESSION VAL:<input name="session" value="<?php echo $_SESSION['session']?>" type="text"/><br>
<input type="submit"/>
</form>

html

<iframe src="iframe.php">

</iframe>
<br>SESSION FROM AJAX:
<div id="AJAX"></div>

AJAX

window.setInterval(function()
    $.get( "iframe.php?want", function( data ) 
        $( "#AJAX" ).html( data );
    );
,1000);

See Fiddle

【问题讨论】:

尝试在输出标题之前启动会话。 @Matt 没区别! 【参考方案1】:

查看如何进行 CORS。很快,要让浏览器使用 ajax 发送会话,您必须在 xhr 中添加一些字段:

$.ajax(
  url : "https://crypter.co.uk/iframe.php?want",
  xhrFields : 
    withCredentials : true // <-- this
  ,
  success : function( data ) 
    $( "#AJAX" ).html( data );
  
);

而且您必须在服务器端允许此类请求,请参阅 this answer。

【讨论】:

@Maximilian 你是什么意思? 好吧,我在使用 Ajax 访问 Iframe.php 时创建了一个会话,然后成功创建了一个带有域的 Iframe,但没有会话。 @Maximilian 我请你做个小提琴

以上是关于从 iframe 到 ajax 的会话的主要内容,如果未能解决你的问题,请参考以下文章

jquery - 如何从我发现的脚本中制作一个 iframe 到 ajax 注入中?

如何根据 iframe 中 AJAX 调用的完成来运行函数

Identity Server 4 - 检查 iframe 会话问题 - oidc 客户端

iframe 和ajax局部刷新的区别

在安卓浏览器中使用 iframe ajax

iframe 中的 laravel 应用程序不断刷新会话