首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行setcookie()的同时,在MySQL表中插入行?

在运行setcookie()的同时,在MySQL表中插入行?
EN

Stack Overflow用户
提问于 2021-02-28 23:25:06
回答 1查看 69关注 0票数 0

我正在尝试插入从用户登录到Wordpress中的自定义MySQL表中存储的cookie中的信息。我正在开发的网站有一个单独的应用程序(R闪亮),它需要基于带有密钥的cookie对用户进行身份验证,我希望将认证信息存储在MySQL中,以便从这个应用程序访问。这个应用程序在从站点访问数据方面是非常有限的,但是从SQL表中提取数据是我找到的最健壮的方法。下面是functions.php中的代码,但更简单一些/更基本:

代码语言:javascript
复制
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‘不同的操作?总体上是否有更好的方法来做到这一点?任何帮助都是非常感谢的!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-09 06:49:32

所以我花了一段时间,但经过大量测试后,我能够让它工作的方式似乎是依赖于设置php会话变量。我必须创建4个独立的函数: 1.)setcookie并编写所需的$_SESSION变量,3)检查所有设置是否正确,并将变量写入MySQL db,然后删除变量和4)。在注销时删除数据库中的cookie和相应的身份验证行。我还将前三个函数按1/2/3的顺序设置为延迟优先级。

我为缺少代码而道歉,但它最终是非常具体的,而且老实说,这是一个很长的过程(很多代码),所以不太适合回答。如果有人有任何问题,请随时回答,我会尽力回答的。最后,我将接受我的回答。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66414885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档