【发布时间】:2015-09-23 13:20:54
【问题描述】:
我有一个简单的网站,您只需要密码即可访问内容。然后有 3 个字段供用户输入数据,然后将其存储在 cookie 中。最后 - 有一个注销脚本可以重置会话并取消设置 cookie。
请在下面找到相关代码:
登录页面(索引)
<?php
session_start();
$password = '';
$wrongPassword = '';
if (isset($_POST['sub'])) {
$password = $_POST['login_passcode'];
if ($password === 'PASSCODE') {
$_SESSION['login'] = true;
header('LOCATION:/personal.php');
die();
} else {
$wrongPassword = true;
}
}
if (isset($_COOKIE['m_username'])) {
header('LOCATION:/personal.php');
die();
}
?>
包含内容的页面,用户输入姓名、部门和开始日期
<?PHP
session_start();
if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {
header("Location:/index.php");
die();
}
?>
和注销脚本:
<?PHP
session_start();
if (isset($_COOKIE[session_name()])):
setcookie(session_name(), '', time() - 7000000,'/');
endif;
if (isset($_COOKIE['m_username'])):
setcookie('marriott_username', '', time() - 7000000,'/');
endif;
if (isset($_COOKIE['m_startdate'])):
setcookie('marriott_startdate', '', time() - 7000000,'/');
endif;
if (isset($_COOKIE['m_department'])):
setcookie('m_department', '', time() - 7000000,'/');
endif;
$_SESSION = array();
session_destroy();
header ("Location:/index.php");
die();
?>
jQuery 在下面创建 cookie:
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
Cookie 确实会过期(至少在 chrome 上),但是在几小时或几天后尝试访问网站后,我收到有关重定向过多的错误。我相信这可能是由于会话过期时间和 cookie 过期时间(cookie 为 5 天)之间存在一些差异,但我真的不知道从哪里开始修复这些......
此外,在 Internet Explorer (IE8) 上,即使我直接注销也会出现重定向问题。
将不胜感激任何帮助, E.
【问题讨论】:
-
您是否尝试过多次调试代码?特别是在重定向之前?至少你会知道错误发生在哪里! =]