【问题标题】:codeigniter csrf not working in safaricodeigniter csrf 在 Safari 中不起作用
【发布时间】:2014-06-21 13:54:59
【问题描述】:

我已经使用 j 查询 ajax 函数来发送 ajax 请求。我正在使用 codeigniter 2.1.4。我还启用了 CSRF。问题是当我使用 POST 方法发送 ajax 请求时,它不起作用,但在类型更改为 GET 时起作用。但即使我将类型更改为 GET,它也不会重定向到给出 302 错误的正确页面。

我的代码是这样的。

$.ajax({
  url: '<?php echo base_url() ?>url_to_function/',
  data: some_data+"&<?php echo $this->security->get_csrf_token_name(); ?>=<?php echo $this->security->get_csrf_hash(); ?>",
  type: 'GET',
  dataType: 'json',
  success: function(response) {
    if ( response) {
      self.location.href  = '<?php echo base_url(); ?>url_to_function/';
    }
    else { 
      // error 
    }
  }
});

【问题讨论】:

  • 你可以尝试删除url的最后一个/
  • 这个运气不好。
  • 你可以试试,some_data + "&amp;&lt;?php echo ....?&gt;";,作为字符串连接。
  • 这不是问题。在其他浏览器上一切正常。
  • 我想你可以查看服务器日志。

标签: jquery ajax codeigniter csrf


【解决方案1】:

好的,如果有人正在寻找它,我已经找到了答案。当您的应用在 iframe 中运行时,CSRF 在 safari 中不起作用。默认情况下,Safari 会阻止 3rd 方 cookie。所以为了创建 iframe 应用有两种方法

  1. 创建无会话单页应用程序
  2. 创建首先重定向到您的站点的应用,以便它们可以创建会话,然后重定向回源站点。

Tictail 使用第一个,而 shopify 使用第二个。

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 2013-03-28
    • 2023-03-05
    • 2014-03-14
    • 1970-01-01
    • 2017-04-22
    • 2011-09-28
    • 2018-12-01
    • 2019-01-08
    相关资源
    最近更新 更多