基本上我想在wordpress中自动登录用户,当他点击他的电子邮件中的链接时,该链接带有用户ID,用户名或电子邮件的参数。
我去研究了Wordpress在登录后存储会话信息的位置。
在我的主题 header.php 中,当我把:
<?php print_r($_COOKIE); print_r($_SESSION); ?>
以 admin 身份登录,我只获得了一个 $ _ COOKIE 数组,因为wordpress不会在内部使用会话。
Array
(
[wordpress_test_cookie] => WP Cookie check
[wordpress_logged_in_80d2ab9fd1f16a2a89ddb8a5553b4463] => admin|1391841132|58e4ae330b4ca7aef9d6a8ffa3c3a1fb
)
我还比较了登录前后的数据库转储,没有任何变化。 由此,我得出结论,Wordpress以cookie的形式存储会话数据。
现在,当用户点击其电子邮件中的链接时,我想绕过Wordpress的登录屏幕。
我想知道上面的cookie数组中存储了哪些数据。 所以我可以动态创建自己的数据并将其推送到 $ _ COOKIE 数组中,以自动登录用户。
有人可以对此有所了解吗?我对尝试任何插件都不感兴趣。我现在想手动完成。
编辑:我遇到了this question,如果我们只知道他的用户名,就会谈到用户的程序化登录。
答案 0 :(得分:4)
好吧,我可以在我的网站的根目录中设置一个脚本,用于处理用户的自动登录,当他点击他的电子邮件中的链接时。该链接有2个参数:他的用户名和他的电子邮件的md5字符串。
例如,如果用户名为“ sam ”且他的电子邮件为“ samuel@example.com ”,则其电子邮件中的示例链接将如下:< / p>
http://www.example.com/user-login.php?username=sam&rand=ddb4b1cd8f56f9946b76399abb9d3106
然后最后 user-login.php 脚本如下:
<?php
require_once ('wp-config.php');
if(isset($_GET['username']) && $_GET['username'] != '' &&
isset($_GET['rand']) && $_GET['rand'] != '')
{
$username = trim($_GET['username']);
$rand = trim($_GET['rand']);
global $wpdb;
$user_details = $wpdb->get_row("SELECT id, user_email FROM wp_users
WHERE user_login='".$username."'");
if(! $user_details->id)
{
die("Error: Not a valid user");
}
else
{
$rand_email = md5($user_details->user_email);
if($rand_email != $rand)
{
die("Error: Invalid URL");
}
else {
$user = get_user_by('login', $username );
if ( !is_wp_error( $user ) )
{
wp_clear_auth_cookie();
wp_set_current_user ( $user->ID );
wp_set_auth_cookie ( $user->ID );
$redirect_to = get_option('siteurl');
wp_safe_redirect( $redirect_to );
exit();
}
}
}
}
else {
die("Error: Missing params");
}
?>
这样,当用户点击其电子邮件中的链接时,他将自动登录并导航到主页。
感谢Sjoerd Linders让我了解他的答案。
答案 1 :(得分:2)
除了这将是一个巨大的安全风险之外,您可以使用java脚本执行此操作并使用用户名和密码将URL发送到网址:www.site.com/wp-admin/admin.php(确保将变量命名为与wordpress中userlogin表上的name标记相同。然后我想你需要刷新只需对dir / wp-admin /。
进行javascript刷新答案 2 :(得分:1)
听起来像非常糟糕的主意(tm)。一方面,你打开你的网站进行脚本攻击(猜测cookie和用户名,你进去),另一方面你鼓励人们只需点击链接登录某些东西(听起来就是这样) ... phish-y,以及任何一半体面的现代邮件客户端都会标记为恶意软件的东西。)
这不是很好的安全措施。
在进一步走这条道路之前,先问问自己:如果badguy使用自动登录链接搜索电子邮件副本会出现什么问题?
你真的想解决什么问题?