我正在尝试插入从用户登录到Wordpress中的自定义MySQL表中存储的cookie中的信息。我正在开发的网站有一个单独的应用程序(R闪亮),它需要基于带有密钥的cookie对用户进行身份验证,我希望将认证信息存储在MySQL中,以便从这个应用程序访问。这个应用程序在从站点访问数据方面是非常有限的,但是从SQL表中提取数据是我找到的最健壮的方法。下面是functions.php中的代码,但更简单一些/更基本:
add_action('init', 'custom_set_login_cookie');
function custom_set_login_cookie() {
if ( is_user_logged_in() && !isset($_COOKIE['custom_cookie'])) {
// Get cookie string proprties
$current_user = wp_get_current_user();
$name_current = $current_user->user_login;
// Set random key for authentication
$auth_key = bin2hex(random_bytes(10));
$cookie_str = $name_current . ' ' . $auth_key;
// Set cookie
setcookie('custom_cookie', $cookie_str, time()+300, '/');
// Insert row to DB for later authentication
global $wpdb;
$wpdb->insert('custom_table', array(
'user_name' => $name_current,
'key' => $auth_key
)
);
}
}这在很大程度上是可行的(有一个相应的函数在注销时移除此行)。设置cookie,将行插入到DB中的自定义表中。但是,我遇到了这个函数在不应该的时候随机插入行的问题。例如,如果页面已经加载了一点(比如20分钟),并且在没有新刷新的情况下执行了一个操作(比如当用户尝试注销时),那么通常在不应该设置cookie的情况下,将一个新行添加到DB中。
是否有一种方法可以确保MySQL插入部分在运行setcookie时准确运行?是否应该在if语句中添加另一个条件,以确保只在新设置cookie时才运行insert?我是否应该将MySQL插入部分(或者可能是setcookie和insert部分)连接到与'inti‘不同的操作?总体上是否有更好的方法来做到这一点?任何帮助都是非常感谢的!谢谢
发布于 2021-03-09 06:49:32
所以我花了一段时间,但经过大量测试后,我能够让它工作的方式似乎是依赖于设置php会话变量。我必须创建4个独立的函数: 1.)setcookie并编写所需的$_SESSION变量,3)检查所有设置是否正确,并将变量写入MySQL db,然后删除变量和4)。在注销时删除数据库中的cookie和相应的身份验证行。我还将前三个函数按1/2/3的顺序设置为延迟优先级。
我为缺少代码而道歉,但它最终是非常具体的,而且老实说,这是一个很长的过程(很多代码),所以不太适合回答。如果有人有任何问题,请随时回答,我会尽力回答的。最后,我将接受我的回答。
https://stackoverflow.com/questions/66414885
复制相似问题