是否通过子域、不同服务器上的非WordPress页面注销?

时间:2016-03-25 作者:Ryflex

类似于上的问题Get wp_logout_url function to work on external (non-Wordpress) page

我面临的问题是,子域位于不同的服务器上,因此我无法包含/要求wp-blog-header.php 文件

有没有一种方法可以让我将允许即时注销的域列入白名单,就像您可以为redirect whitelist.

如果没有,我如何允许子域(具有远程sql访问权限)创建有效的注销链接,绕过“是否确实要注销”通知。

回复:@SatbirKira这样做是为了确保注销在一定程度上是“有效的”:

设置每24小时一次的注销URL,使其具有附加随机字符串的查询字符串,例如:http://website.com/custom_logout.php?confirm=sj239ks, 之后是http://website.com/custom_logout.php?confirm=32k9la3每次更改时,它都会编辑一个特定文件(另一台服务器上的custom\\u logout.php或其自己的服务器或其他服务器上的txt/ini文件),并创建一个字符串数组/列表

$confirmkeys = array("sj239ks", "32k9la3");

[confirmkeys]
confirm[] = sj239ks
confirm[] = 32k9la3
它在文件中只有两个确认键,一个用于24小时前(以防有人仍打开页面),另一个用于当前24小时)

I guess the same thing could be done individually instead of globally but is there much need for that?

<编辑custom_logout.php 添加检查以查看是否$_SERVER[\'HTTP_REFERER\'] 来自同一域(所有子域)。如果随后设置matching_referer 为真。如果没有,请将变量设置为false。

编辑custom_logout.php 添加检查以查看查询字符串是否与存储在特定文件中的字符串匹配。(使用辅助服务器上的txt/ini文件最简单?)如果匹配,则设置matching_confirm 为真。如果没有,请将变量设置为false。

编辑custom_logout.php 如果其中一个(任何)检查为真,那么它就可以干净地注销,如果两个检查都是错误的,那么通过将它们发送到/wp-login.php?action=logout

2 个回复
最合适的回答,由SO网友:Satbir Kira 整理而成

您可以创建一个名为custom\\u logout的文件。php并将其放在根wordpress目录中。此包含

<?php 
     require_once("wp-load.php"); //load wordpress
     wp_logout(); //logout
     exit(); //end page
?>
然后在您的子域站点中打开带有锚定标记的url

<a href="http://youwebsite.com/custom_logout.php">Logout</a>
您无法轻松创建白名单,因为这将涉及使用$\\u SERVER[\'HTTP\\u REFERER\']检查用户来自何处,这是不可靠的(通常为空)。不幸的是,没有简单的解决方案。

Reply To Your Edit

如果临时关键方法是一种负责任的折衷方案,那么您完全可以自由地实施它。但是,您可以发送当天的md5哈希,而不是两个随机键。在两台服务器上使用相同的加密盐。现在,您只需在custom\\u注销中重新计算昨天的哈希值和当天的哈希值。php并将其与传入的get变量进行比较。它消除了对txt/ini文件的需要。

SO网友:shramee

假设您是这两个站点的管理员。。。

在主wp站点中添加管理ajax处理程序。。。

add_action( \'wp_ajax_logout\', \'my_logout_callback\' );
function my_logout_callback() {
    wp_logout(); // Log out
    header(\'Location: http://www.example.com/successfully-logged-out\');// Maybe redirect user somewhere?
    wp_die();
}
在您的子域站点中,链接到主站点的管理ajax处理程序。。。

<a href=\'//example.com/wp-admin/admin-ajax.php?action=logout\'>Logout</a>

相关推荐

Wp_logout()WordPress 5.1.1中的更改

我们最近刚刚将WordPress网站升级到5.1.1升级后,我们在执行wp_logout() WordPress的功能。不知怎的,我们得到了302 响应,但未显示错误/警告。我把它缩小到wp_logout() 并确定wp_destroy_current_session(); 和wp_clear_auth_cookie(); 工作正常!这意味着错误发生在wp_logout() 被称为:do_action( \'wp_logout\' ); 我的问题是:外部插件是否可能以某种方式损坏wp_logou