我有一個基本的登錄系統。基本登錄/註銷功能如下:cookies不被刪除
function login() {
global $page;
if ($_COOKIE['adminUser'] == adminUser && $_COOKIE['adminPass'] == adminPass):
$_SESSION['adminLogin'] = true;
redirect($_SERVER['REQUEST_URI']);
elseif ($_POST['adminUser'] == adminUser && $_POST['adminPass'] == adminPass):
setcookie('adminUser', $_POST['adminUser'], time() + 60 * 60 * 24 * 7);
setcookie('adminPass', $_POST['adminPass'], time() + 60 * 60 * 24 * 7);
$_SESSION['adminLogin'] = true;
redirect($_SERVER['REQUEST_URI']);
else:
$page->content->table = new template('admin/login.tpl');
// it shows the login form
endif;
}
function logout() {
$_SESSION['adminLogin'] = false;
setcookie('adminUser', false, time() - 60*100000);
setcookie('adminPass', false, time() - 60*100000);
redirect(pathApp);
}
redirect($x)
是header("Location: $x"); die;
。
在整個劇本的任何地方都沒有設置其他的COOKIES。
問題是註銷功能不起作用。我試圖通過Firebug進行調試,看看有哪些頭文件正在發送,並且對我來說一切似乎都沒問題。這裏是螢火蟲的登出日誌:
Response Headers
HTTP/1.1 200 OK
Date: Fri, 15 Apr 2011 18:48:57 GMT
Server: Apache
X-Powered-By: PHP/5.2.13
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: adminUser=deleted; expires=Thu, 15-Apr-2010 18:48:56 GMT
adminPass=deleted; expires=Thu, 15-Apr-2010 18:48:56 GMT
Content-Length: 1041
Connection: close
Content-Type: text/html
Request Headers
GET /freeads/admin/logout HTTP/1.1
Host: clienti.bsorin.ro
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://clienti.bsorin.ro/freeads/admin
Cookie: adminUser=q; adminPass=q; PHPSESSID=22faf6e20467b88d97dc7838572cbd47
該腳本是在http://clienti.bsorin.ro/freeads/admin。用戶名和密碼都設置爲'q'。
謝謝!
請勿使用相對時間值來刪除Cookie。它假設客戶的時鐘是準確的,但情況並非總是如此。要刪除cookie,請始終使用固定的「古代」日期,如Jan 1/1970 00:00:01。並且請告訴我,您不在該cookie中存儲用戶名/密碼...請請告訴我您不是。 – 2011-04-15 18:58:57
@Marc:此時我在COOKIE中存儲用戶名/密碼。不要擔心,但它絕對不是最終的。我以爲'time() - 60'實際上是在發送服務器時間( - 60)。我嘗試了它像'setcookie('adminUser',false,1)'但仍然沒有運氣。 – 2011-04-15 19:04:24