在每个页面上,我都设置了一个cookie来为与该会话对应的标题按钮着色。 问题是,我第一次在不同的部分打开一个页面时,cookie仍然是旧的,而彩色按钮也是如此。 然后,如果我再次单击相同的按钮,则会正确设置cookie。为什么呢?
这是我的代码:
<?php
include $_SERVER['PERCORSO_GLOBALS'];
$pagelevel = '1';
require_once ROOT_DIR.'/administrator/flock/session_users.php';
setcookie('lng', 'it');
?>
<head>
...
</head>
<body>
<?php
$currentpage = basename(__FILE__);
function colorButtonHeader($section){
if(isset($_COOKIE['lng'])){
if($_COOKIE['lng'] == $section){
echo "buttonon";
}
}else{
echo 'Error';
die($refresh);
}
}
?>
<div id="button">
<ul>
<li><a href=<?=$index_admin?>><span class="<?php colorButtonHeader('home') ?>">HOME</span></a></li>
<li><a href=<?=$italiano?>><span class="<?php colorButtonHeader('it') ?>">ITALIANO</span></a></li>
<li><a href=<?=$tedesco?>><span class="<?php colorButtonHeader('de') ?>">DEUTSCH</span></a></li>
<li><a href=<?=$francese?>><span class="<?php colorButtonHeader('fr') ?>">FRANÇAIS</span></a></li>
</ul>
</div>
?>
<div id="content">
...
</div>
</body>
</html>
答案 0 :(得分:2)
设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组访问下一页加载。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST。
中
当您使用setcookie()
时,您正在设置Cookie,但$_COOKIE
数组仅包含现有Cookie(它是在页面加载时创建的)。
请改为:
setcookie('lng', 'it');
$_COOKIE["lng"] = "it";
或者只是在第一次设置Cookie时重定向到页面本身(header("Location: ".$_SERVER["PHP_SELF"]);
)。
答案 1 :(得分:0)
Cookie在客户端计算机中设置,因此您无法同时从服务器设置和检查,而是使用JavaScript。
你可以使用这个js函数Taken from this post
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function colorButtonHeader(selected){
if(readCookie('lng') == selected ){
alert('cookie is set ');
}else{
alert('Wrong language');
}
}
答案 2 :(得分:0)
每次设置Cookie时只需重新加载页面即可。
setcookie("Cookiename", $value, time()+1800, "/", $_SERVER['SERVER_NAME'], FALSE, TRUE);
header('Location:'.$_SERVER['REQUEST_URI']);
答案 3 :(得分:0)
我找到了这个解决方案,这似乎是最快的改进方法:
function colorButtonHeader($section){
if(isset($_COOKIE['lng'])){
if($_COOKIE['lng'] == $section){
echo "buttonon";
setcookie('lng', '', time()-3600);
}
}else{
header("Location: ".$_SERVER["REQUEST_URI"]);
// header("Location: ".$_SERVER["PHP_SELF"]);
}
}
每次使用后销毁cookie。因此,在每个页面加载时,cookie都无法使用。这意味着页面重新加载,但只有一次因为cookie可用。它将被使用并再次被破坏。
修改强>
如果您通过URL传递参数,那么当您使用:
时header("Location: ".$_SERVER["PHP_SELF"]);
这些参数正在迷失。所以最好使用:
header("Location: ".$_SERVER["REQUEST_URI"]);