我有一个使用Zend Framework开发的网站。我也有一个Wordpress网站放在同一台服务器上。当我登录Zend网站时,是否可以使用任何(e:g AJAX调用)登录Wordpress网站。
的原因: 的
我在Zend网站上有一个word press blog的链接,当我点击该链接时,它会带我到Wordpress登录页面。
我希望用户可以按照登录用户的身份按文字页面链接。
我对此进行了很多研究,但没有找到正确的路径。
感谢。
答案 0 :(得分:0)
禁止在两个不同的域名之间使用AJAX,您可以在PHP中使用Curl函数。 http://bit.ly/RBGgfp
答案 1 :(得分:0)
您的问题存在安全问题。如何将凭证从一个网站传递到另一个网站而不实际传递它们......
您需要某种授权过程,告诉WP,登录到WP的用户实际上是已经登录到Zend的用户。为此,您不能只是在从ZF到WP的Ajax调用中传递用户名和密码,因为每个人都可以从缓存的JS源代码中获取用户的密码。 此外,你不能只在ajax调用中传递用户名,因为这样每个人都可以进行这样的ajax调用以其他人的身份登录。
通常,您应该尽可能地限制通过客户端请求(Ajax)传递授权。
这样做的一种方式是许多称为OAuth的社交网络(即Facebook)使用的机制。 Facebook使用特殊令牌进行授权,并且在Facebook和使用Facebook连接机制的网站之间不传递凭据。 Facebook也使用PHP的curl函数来进行跨服务器调用,因此在客户端没有关于授权过程的任何痕迹。
你可以,但你不必使用OAuth,但如果你这样做,这将是一个很好的经验。
您面临的另一个问题是,您的ZF和WP可能在客户端使用不同的授权Cookie。因此,当在ZF网站上授权用户时,您还需要对负责登录的WP页面进行Ajax调用,以确保设置正确的cookie。
Summa summarum流程类似于此(假设已在两个站点上创建了用户帐户):
现在,因为我们不会将用户密码从ZF发送到WP(我们在WP方面也不知道它 - 因为它是加密的)你不能使用wp_signon来登录用户。但是你可以使用wp_set_auth_cookie,为了这个特殊目的就足够了。
这是一个粗略的解释,但我希望它会有所帮助。
P.S。不推荐使用wp_login,您应该避免使用它。
此外,wp_login操作不会调用wp_set_auth_cookie,这可能是您的用户未首先显示为登录状态的原因。
使用wp_set_auth_cookie尝试您的解决方案。我最后这样说,所以你不要错过上面的安全问题。
答案 2 :(得分:0)
由于两个站点都在同一台服务器上,因此您可以从Zend和WordPress访问文件。当用户登录到基于Zend的站点时,您可以添加一个调用来加载基本的wordpress文件,然后使用函数wp_set_auth_cookie()将用户登录到wordpress。
require_once 'wordpress-directory/wp-load.php';
wp_set_auth_cookie( $wp_user_id );
在Zend网站上的用户表格中,您可以添加一列wp_user_id
来存储用户的wordpress用户ID,以便了解传递wp_set_auth_cookie()
功能的用户ID。
如果你想要查看它,我会用更一般的术语写一篇博客文章here