This probably isnt the reason why it isnt working, but the location header requires an absolute URI. Based on what is given in the PHP manual on [man]header/man, I suggest:
session_start();
$base_uri = 'http://' . $_SERVER['HTTP_HOST']
. rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . '/';
// Not logged in
if (empty($_SESSION['login_id'])) {
header('Location: ' . $base_uri . 'login.php');
exit;
}
// No disclaimer cookie?
if (empty($_COOKIE['disclaimer'])) {
header('Location: ' . $base_uri . 'disclaimer.php');
exit;
}
The reason for the exit after the header is so that the redirect happens immediately. If not, PHP will continue parsing the rest of the page, even though that is unnecessary. I use empty() instead of isset() because you not only want to check for the existence of the variable, but also that it is not empty (i.e. non-zero, true, or a non-zero length string).
As a matter of practice, I never use isset to check a particular value of an array. I only use it for the variable itself like if ( ! isset($x))
For incoming variables, you should use isset() or empty(), or perhaps array_key_exists() before using the variable.