I have a game that I am in the process of updating. Originally it passed scores in with the URL, but I decided to update it so that the scores are not visible. My first thought was to use session variables, but since I want to change the scores in response to calculations that are done in JavaScript, that isn’t feasible. A better way is to use cookies. When I first enter a page, I set or get the cookies with PHP. I want the game levels to persist from visit to visit but the scores are only kept for the session.
// Initialize the cookies with PHP. Keep the group and level around but make the scoring session cookies
// If the cookie is set by the code, it is not available until the next page load
$cookie_name = "VPA_group";
$cookie_value = "MW1";
if( !isset($_COOKIE[$cookie_name]) ) {
setcookie($cookie_name,$cookie_value,$cookie_time,$cookie_path,$cookie_domain,$cookie_secure,$cookie_httponly);
}
$group = isset($_COOKIE["VPA_group"]) ? $_COOKIE["VPA_group"] : $cookie_value;
$cookie_name = "VPA_WFF";
$cookie_value = "Wide";
if( !isset($_COOKIE[$cookie_name]) ) {
setcookie($cookie_name,$cookie_value,$cookie_time,$cookie_path,$cookie_domain,$cookie_secure,$cookie_httponly);
}
$WFF = isset($_COOKIE["VPA_WFF"]) ? $_COOKIE["VPA_WFF"] : $cookie_value;
$cookie_name = "VPA_cor";
$cookie_value = 0;
if( !isset($_COOKIE[$cookie_name]) ) {
setcookie($cookie_name,$cookie_value);
}
$cor = isset($_COOKIE["VPA_cor"]) ? $_COOKIE["VPA_cor"] : $cookie_value;
$cookie_name = "VPA_inc";
$cookie_value = 0;
if( !isset($_COOKIE[$cookie_name]) ) {
setcookie($cookie_name,$cookie_value);
}
$inc = isset($_COOKIE["VPA_inc"]) ? $_COOKIE["VPA_inc"] : $cookie_value;
$cookie_name = "VPA_screen";
$cookie_value = 0;
if( !isset($_COOKIE[$cookie_name]) ) {
setcookie($cookie_name,$cookie_value);
}
$screen = isset($_COOKIE["VPA_screen"]) ? $_COOKIE["VPA_screen"] : $cookie_value;
Once I have the values, I need to let JavaScript know what they are.
<script>
<?php
echo "var cor = $cor;\n";
echo "var inc = $inc;\n";
echo "var screen = $screen;\n";
echo "var group = \"$group\";\n";
echo "var WFF = \"$WFF\";\n";
echo "var cookie_days = \"$cookie_days\";\n";
?>
</script>
Then I can use JavaScript to change them, as I described in the previous post.
function goNext() {
setCookie('VPA_cor',cor,'N');
setCookie('VPA_inc',inc,'N');
setCookie('VPA_screen',screen,'N');
window.location="ThisGame.php";
}
function changeLevel(cookieName, cookieValue) {
cor = 0;
inc = 0;
screen = 0;
setCookie('VPA_cor',cor,'N');
setCookie('VPA_inc',inc,'N');
setCookie('VPA_screen',screen,'N');
setCookie(cookieName, cookieValue, 'Y');
}
function setCookie(cname, cvalue, set_time) {
var expires = '';
if ( set_time == 'Y' ) {
var d = new Date();
d.setTime(d.getTime() + (cookie_days*24*60*60*1000));
expires = "expires="+d.toUTCString();
}
//alert('cname ' + cname + 'group ' + cvalue + 'time ' + expires);
document.cookie = cname + "=" + cvalue + "; " + expires;
}
</script>