我已搜索过,无法找到答案。
我们正在使用的网站中有代码,用户在登录WordPress时设置cookie。目前正在添加cookie,但cookie未到期的日期(从今天起30天)未正确设置。登录发生后cookie就会出现,但日期没有按照预期在cookie中定义30天。
add_action( 'wp_login', 'bro_set_universal_cookie' );
function bro_set_universal_cookie() {
global $i2sdk;
$email = wp_get_current_user()->user_email;
// get infusionsoft ID
$returnFields = array('Id');
$client_data = $i2sdk->isdk->findByEmail($email, $returnFields);
$Infusionsoft_ID = $client_data[0]['Id'];
setcookie( 'CookieName', $Infusionsoft_ID, 30 * DAYS_IN_SECONDS, '/',
'.websitenamehere.com');
}
add_action('wp_head','rup_check_referrer');
function rup_check_referrer() {
if(get_post_type() == "sfwd-courses"){
if(isset($_GET['registersuccess']) && $_GET['registersuccess']==1)
{
$cur_url=strtok($_SERVER["REQUEST_URI"],'?');
header("Refresh:0; url=$cur_url");
}
}
}
在查看之后,看来该部分中包含Transients API日期,此部分:
30 * DAYS_IN_SECONDS
假设是:
30 * DAY_IN_SECONDS
如下所述:
https://codex.wordpress.org/Transients_API
然而,当更改它并从DAYS中删除S时,cookie根本不再应用。这很奇怪。
如果有人可以帮助让Cookie到期日期在30天后到期,我们将不胜感激。任何正确代码的例子都会非常有用。我假设它与需要更改的这部分代码有关:
30 * DAYS_IN_SECONDS
不确定最好的方法。想到不使用瞬态API作为日期,而只是用PHP写日期到cookie可能是一个更好的选择?像这样:
add_action( 'wp_login', 'bro_set_universal_cookie' );
function bro_set_universal_cookie() {
global $i2sdk;
$email = wp_get_current_user()->user_email;
// get infusionsoft ID
$returnFields = array('Id');
$client_data = $i2sdk->isdk->findByEmail($email, $returnFields);
$Infusionsoft_ID = $client_data[0]['Id'];
setcookie( 'CookieName', $Infusionsoft_ID, echo date('Y-m-d', strtotime("+30
days")), '/', '.websitenamehere.com');
}
add_action('wp_head','rup_check_referrer');
function rup_check_referrer() {
if(get_post_type() == "sfwd-courses"){
if(isset($_GET['registersuccess']) && $_GET['registersuccess']==1)
{
$cur_url=strtok($_SERVER["REQUEST_URI"],'?');
header("Refresh:0; url=$cur_url");
}
}
}
提前感谢您提供任何帮助!
答案 0 :(得分:0)
好的,修好了这个...我使用的修复程序的编辑是我改变了这个:
setcookie( 'CookieName', $Infusionsoft_ID, 30 * DAYS_IN_SECONDS, '/', '.websitenamehere.com');
在做了一些研究之后,我写了这个新代码。我意识到原来的代码不应该使用瞬态API日期替换,只是好的'ol PHP日期就是答案:
setcookie( 'CookieName', $Infusionsoft_ID, time() + (86400 * 30), '/', '.websitenamehere.com');
希望这可以帮助将来可能需要它的人!