【问题标题】:Wordpress setcookie with AJAX带有 AJAX 的 Wordpress setcookie
【发布时间】:2016-10-29 21:11:38
【问题描述】:

首先,我还没有看到对类似问题进行排序的任何答案。如果你发现一个已经存在的,请告诉我。

简单的 AJAX 请求,它设置了一个 cookie 来存储计时器到期,该死的 cookie 没有被设置,我不知道为什么。

我正在使用Vue Resource,所以请不要使用 jQuery。事实上,我绝对确定它与 JS 或 AJAX 完全无关。它发布得很好,并且“到期”返回得很好。

JS:

var sessionKey = document.querySelector('meta[name=dbs]').getAttribute('content');
if(sessionKey.length < 1){
    var data = {action: 'dbs_reservation'};
    this.$http.get(ajaxurl,data).then((response) => {
        this.sessionExpiry = response.data.expiry;
     })
}

PHP

function dbs_timer_session(){
    if(empty($_COOKIE['dbs_timer'])){
        $t = time()+600;
        setcookie('dbs_timer', md5($t).'|'.$t, COOKIEPATH, COOKIE_DOMAIN);
    } else {
        $t = explode('|',$_COOKIE['dbs_timer']);
        $t = $t[1];
    }
    echo json_encode(['expiry' => $t]);
    wp_die();
}

编辑 1 根据要求,wp_ajax 操作

add_action( 'wp_ajax_nopriv_dbs_reservation', 'dbs_timer_session' );
add_action( 'wp_ajax_dbs_reservation', 'dbs_timer_session' );

【问题讨论】:

  • 谁投票关闭和幻影downvoter?你介意解释一下原因吗?
  • +1 表示不使用 jQuery。您似乎将 COOKIEPATH 传递给了到期时间参数。对于测试,您应该将 setcookie 的输出传回,这将是错误的。我假设您知道您也可以使用 js 设置 cookie?快很多!
  • 谢谢大卫!不敢相信我错过了!请将此作为答案,我将标记为正确的答案
  • 没问题,ajax 测试在处理 json 输出时可能会很痛苦......但必须完成:(

标签: php ajax wordpress vue-resource


【解决方案1】:

您缺少setcookie 的参数

 setcookie('dbs_timer', md5($t).'|'.$t, 'missing_expiry_time', COOKIEPATH, COOKIE_DOMAIN);

【讨论】:

    【解决方案2】:

    你能告诉我们你是如何设置动作的吗?以下是示例,具体取决于您是在管理员还是前端。

    //For admin use only:
    add_action( 'wp_ajax_my_action', 'my_action_callback' );
    
    //For front end use
    add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
    

    【讨论】:

    • 不是这样,AJAX 请求有点成功,并且正确返回了 JSON。不管怎样,我已经编辑了问题
    猜你喜欢
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多