如何在我的网站上阅读 wordpress cookie?

Posted

技术标签:

【中文标题】如何在我的网站上阅读 wordpress cookie?【英文标题】:How to read wordpress cookies in my website? 【发布时间】:2012-03-10 03:39:19 【问题描述】:

我想将我的网站与 wordpress 集成。我想知道如何读取 wordpress cookie,这样我就不需要在我的网站中再次对用户进行身份验证。我尝试在我的网站中包含 wordpress 的头文件,但是然后我无法连接到我网站的数据库。两者都不一样。我可以设置用户级别等cookie的附加参数吗?我的网站是用php编写的。

【问题讨论】:

包含 WP 头文件可能是最好的方法。我建议再次检查兼容性问题 - 在同一个脚本中应该可以有一个 WP DB 连接和其他一些连接。 您的网站是否在与 WP 网站相同的(子)域上运行?如果是这样,只需查看 $_COOKIE 数组,WP cookie(s) 就会在其中。如果您在不同的域中,那么情况会复杂得多。 【参考方案1】:

在您的网站中,在每个文件的顶部包含该代码:

<?php 
define('WP_USE_THEMES', false);
require('./blog/wp-blog-header.php');
?>

...假设您的博客位于./blog/

它包括整个 wordpress 堆栈。您将可以访问代码中的所有 wordpress 功能。有了它,您可以轻松检查用户是否已登录、角色和功能,还可以检索帖子等。

然后在你的代码中,检查用户:

if (is_user_logged_in())  ...  

Codex : is_user_logged_in()

您还可以添加注销链接:

<a href="<?php bloginfo("url"); ?>/wp-login.php?action=logout/">Logout</a>

如果您的博客和您的网站不在同一个域或子域中,您必须在wp-config.php中自定义cookie域

define('COOKIE_DOMAIN', '.domain.com'); // Share cookie on all subdomains

编辑

如果你真的只是想阅读 wordpress cookie(这是一个很好的性能选择):cookie 名称存储在常量 AUTH_COOKIE 中。

AUTH_COOKIE 在/wp-includes/default-constants.php -&gt; line 171 中定义为

"wordpress_" + md5( get_site_option(siteurl) )

您必须检索或重新计算 AUTH_COOKIE,然后读取 $_COOKIE[AUTH_COOKIE]。

要解析它,请查看wp-includes/pluggable.php @line 585 中的wp_parse_auth_cookie() (确实格式很简单user|expiration|hmac 所以用| 分割链并得到第一个元素)

【讨论】:

但是如果我在我的网站页面中包含 wordpress 标题,那么我将无法连接到我自己的数据库。网站和博客在同一个域中。有什么方法可以在不使用 header 的情况下读取 cookie? 没有理由不能连接到您的数据库,除非您的托管服务提供商限制了您的数据库连接。我怀疑,因为您说这是两个不同的数据库。但是请参阅我的编辑以另一种方式... @Artimuz 我正在使用 jquery uploadify,从 wordpress 页面上传文件。我首先尝试使用include_once '../../../../wp-load.php';,然后使用您推荐的代码,但is_user_logged_in() 仍然返回false。在我看来,它更像是一个 wordpress 错误。 在浏览器中输入了uploadify php脚本,它工作了......所以猜测这是某个地方的uploadify错误。 我在***.com/questions/40146667/… 发布了一个灵魂,如果您的目标是让事情变得简单,花费 1.05 瑞典克朗,这可能会有所帮助。【参考方案2】:

要使 cookie 在 Wordpress 中工作,您需要像在 functions.php 中那样设置它

function set_newuser_cookie() 
    if (!isset($_COOKIE['sitename_newvisitor'])) 
        setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false);
    

add_action( 'init', 'set_newuser_cookie');

所以重点是 setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false);

得到它

if (isset($_COOKIE['sitename_newvisitor'])) 
     echo 'Welcome back!';

else 
     echo 'Hello new visitor!';

注意:您可以更改 cookie 名称“sitename_newvisitor”、值、超时、COOKIEPATH 和 COOKIE_DOMAIN 以满足您的需要

【讨论】:

以上是关于如何在我的网站上阅读 wordpress cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何在网络上和通过 localhost 在本地启用 wordpress 网站

在我的网站和 wordpress 博客之间共享会话

无法在我的 wordpress 网站上安装 jetpack

为啥这个 scrollLeft JS 函数不能在我的本地 wordpress 网站上运行?

Google Adsense 不要在我的网站页面上展示广告

如何在我的 WordPress 网站中显示 Instagram 关注者计数器?