当调用Get_Current_User_id()时,跨域AJAX请求总是返回0;

时间:2018-11-19 作者:Tim von Känel

我目前使用localhost,当我想测试对web服务器的ajax请求时,函数get\\u current\\u user\\u id()总是返回0。然而,当我从我的网站发出ajax请求时,它是有效的。在浏览器中打开文件还会返回当前wp\\U用户id。我向其发出请求的文件:

<?php
require_once $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\';
echo get_current_user_id();
我的身体里有cors。htaccess已启用,其他WordPress功能正常工作,我的控制台中没有收到任何警告或错误。

我的htaccess:

<IfModule mod_rewrite.c>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, 
content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, 
OPTIONS"
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
ErrorDocument 401 /index.php?status=404
ErrorDocument 403 /index.php?status=404
ErrorDocument 404 /index.php?status=404
ErrorDocument 500 /index.php?status=404
</IfModule>
提前感谢您的帮助!

编辑:由于“Tim”的回答,我尝试了以下方法,但没有成功。

在我的功能中。php:

function example_ajax_request()
{
    echo get_current_user_id();
    die();
}
add_action(\'wp_ajax_example_ajax_request\', \'example_ajax_request\');
add_action(\'wp_ajax_nopriv_example_ajax_request\', \'example_ajax_request\');
本地主机上的Javascript:

var ajax = new XMLHttpRequest();
var formData = new FormData();
formData.append("action", "example_ajax_request");
ajax.open(
  "POST",
  "https://my-website.com/wp-admin/admin-ajax.php"
);
ajax.onload = function() {
  console.log(ajax.responseText);
};
ajax.send(formData);
-->当用户未登录时,在控制台中返回0

更新-找到解决方案:

问题是javascript并没有自动跨域发送cookie。我必须设置

var ajax = new XMLHttpRequest();
ajax.withCredentials = true;
在那之后,我不得不补充

Header add Access-Control-Allow-Credentials true
给我的。htaccess,因此允许跨域cookie传输。

1 个回复
最合适的回答,由SO网友:Tim 整理而成

不要编写自己的引导程序,通过wp-admin/admin-ajax.php

文件:https://codex.wordpress.org/AJAX_in_Plugins

然后你可以确定WordPress包含了你需要的所有功能。

更新:

我错过了从本地机器发布到远程服务器的内容。如果您的JavaScript正在另一个域上运行,它将不会发回web服务器的登录cookie。CORS不能帮你。

结束

相关推荐

帮助查找要从unctions.php移出的一些代码

我被告知下面的代码包含恶意软件,这是托管人员发给我的。但我不知道这会在哪里,也不知道这意味着什么。我是一个初学者,所以如果听起来很愚蠢,我很抱歉。功能。php/home/sites/3a/e/e806688333/public\\uhtml/wp-content/themes/listify/functions。php通用。文件收到目录0<?php if (isset($_REQUEST[\'action\']) && isset($_REQUEST[\'password\'