On Page Variable =
$lgc_code = '1,2,3,15,23,30';
Cookie =' lgc_cntl'
我的cookie为每个用户提供逻辑代码,以确定基于之前访问过的网页应显示哪些横幅或图标。我写了以下函数:
$lgc=$lgc_code;
// check for variable for multiple codes
$expEncArr = explode(",", $lgc);
$results = count($expEncArr);
if(isset($_COOKIE['lgc_cntl'])) {
// read cookie
$cookie_codes = $_COOKIE['lgc_cntl'];
// Build Array of cookie codes
$expEncArr2 = explode(",", $cookie_codes);
foreach($expEncArr as $l_code) {
if(in_array($l_code, $expEncArr2)) {
$lgc_codes=$_COOKIE['lgc_cntl'];
} else {
$lgc_codes=$_COOKIE['lgc_cntl'].','.$l_code;
} // end array search statement
// add campaign to cookie
setcookie('lgc_cntl',$lgc_codes,time() + (86400 * 365), "/", ".oru.edu"); // 86400 = 1 day
} // end foreach statement
} else {
$lgc_codes = $lgc;
// add campaign to cookie
setcookie('lgc_cntl',$lgc_codes,time() + (86400 * 365), "/", ".oru.edu"); // 86400 = 1 day
} // end isset(cookie) if / else statement
如果没有设置cookie,该函数可以正常工作,但是如果找到了cookie,它只会添加数组中的最后一个变量,而不是已经在cookie中找到的任何代码。
该功能应如下工作:
它一直在工作但是当设置cookie时,它只添加字符串中的最后一个变量,即使其他变量都不在cookie数组中。我做错了什么或如何解决这个问题?
答案 0 :(得分:1)
这是一个常见错误 - $_COOKIE
不受调用setcookie
的影响。这是因为$_COOKIE
是在PHP脚本执行开始时根据从浏览器发送的数据创建的,setcookie
将数据发送到浏览器。
因此,每次运行此行:
$lgc_codes=$_COOKIE['lgc_cntl'].','.$l_code;
$lgc_codes
的值是浏览器最初发送的cookie字符串加上一个额外的代码。
解决方案是使用局部变量(例如$new_cookie_value
)来构建完整字符串,然后调用setcookie
一次:
$new_cookie_value = $_COOKIE['lgc_cntl'];
foreach($expEncArr as $l_code) {
// if statement removed to keep example brief
// Add extra code to list
$new_cookie_value = $new_cookie_value .','.$l_code;
}
// Now call setcookie once with the desired value
setcookie('lgc_cntl',$new_cookie_value,time() + (86400 * 365), "/", ".oru.edu");
[旁白:不要低估好的变量名称的价值。如果$expEncArr
和$expEncArr2
有更长的名称来描述它们之间的区别,那么您的代码会更加清晰。同样,$lgc
,$lgc_code
,$lgc_codes
等等。
答案 1 :(得分:0)
你的逻辑非常混乱。这应该是if
块
// read cookie
$cookie_codes = $_COOKIE['lgc_cntl'];
// Build Array of cookie codes
$expEncArr2 = explode(",", $cookie_codes);
$lgc_codes = $_COOKIE['lgc_cntl'];
foreach ($expEncArr as $l_code)
{
if (!in_array($l_code, $expEncArr2))
{
$lgc_codes .= ',' . $l_code;
}
}
setcookie('lgc_cntl', $lgc_codes, time() + (86400 * 365), "/", ".oru.edu");