У меня очень странная проблема.Если кто-то входит на мою страницу, а затем выходит из системы, он автоматически снова входит в систему при посещении страницы входа.Согласно моему расширению cookie для Google Chrome, файл cookie, содержащий информацию о пользователе, исчезает при выходе из системы.
Это код на моей странице входа в систему:
<?php
if (isset($_GET['do'])) {
if ($_GET['do']==='success') {
echo '<p>'.LOGIN_SUCCESS.'</p>';
}
} else {
if ($login>0) {
echo '<p>'.LOGIN_ERR_ONE.'</p>'; //This error is triggered when a user visits the login page and gets automatically logged in. Don't know why though.
} else {
echo '<h2>'.LOGIN_HEADER.'</h2>';
if ($_POST['name'] || $_POST['pass']) {
if ($_POST['name'] && $_POST['pass']) {
$query=mysql_fetch_array(mysql_query(sprintf("SELECT * FROM users WHERE name='%s'", mysql_real_escape_string($_POST['name']))));
if ($query) {
if ($query['password']===getPassHash($_POST['pass'], $query['hash'])) {
if ($query['rank']===0) {
echo '<p>'.LOGIN_ERR_FOUR.'</p>';
} else {
if ($_POST['time']==='1') {
$time=30;
} else {
$time=1;
}
echo '<script type="text/javascript">setCookie(\'eresig_user\', \''.$_POST['name'].':'.getPassHash($_POST['pass'], $query['hash']).':'.$time.'\', '.$time.', \'login\')</script>';
}
} else {
echo '<p>'.LOGIN_ERR_THREE.'</p>';
}
} else {
echo '<p>'.LOGIN_ERR_THREE.'</p>';
}
} else {
echo '<p>'.LOGIN_ERR_TWO.'</p>';
}
}
?>
<form action="<?=$adr?>login" method="post">
<table class="form">
<tr>
<td class="left"><?=LOGIN_FORM_ONE?></td>
<td class="right"><input type="text" name="name" class="reg_input" /></td>
</tr>
<tr>
<td class="left"><?=LOGIN_FORM_TWO?></td>
<td class="right"><input type="password" name="pass" class="reg_input" /></td>
</tr>
<tr>
<td class="left"><?=LOGIN_FORM_THREE?>*</td>
<td class="right"><input type="checkbox" value="1" name="time" /></td>
</tr>
</table>
<input type="submit" value="<?=SUBMIT_FORM?>" />
</form>
<p>* <em><?=LOGIN_FORM_TIP?></em></p>
<?php
}
}
?>
И это код, которыйпроверяет, вошел ли кто-то в систему:
if (isset($_COOKIE['eresig_user'])) {
list($user, $pass, $m)=explode(':', $_COOKIE['eresig_user']);
$rows=mysql_fetch_array(mysql_query(sprintf("SELECT * FROM users WHERE name='%s'", mysql_real_escape_string($user))));
if ($rows) {
if ($rows['password']===$pass) {
setcookie('eresig_user', $_COOKIE['eresig_user'], time()+(3600*24*$m));
if ($rows['rank']>0) {
$login=$rows['rank'];
} else {
$login=0;
setcookie('eresig_user', '', time()-(3600*24));
die('<!DOCTYPE html><html><head><script type="text/javascript">function redirectPage() { window.location="'.$adr.'"; }</script><style type="text/css">body{background:#fff;color:#000;font:0.85em sans-serif;}</style></head><body onload="setTimeout(\'redirectPage()\', 2500)"><p>You are banned!<br />You will shortly be redirected</p></body></html>');
}
} else {
$login=0;
setcookie('eresig_user', '', time()-(3600*24));
}
} else {
$login=0;
setcookie('eresig_user', '', time()-(3600*24));
}
} else {
$login=0;
}
И я использую этот JavaScript для установки / удаления фактического cookie:
<script type="text/javascript">
function setCookie(c_name, value, days, page) {
if (days==0) {
var date=new Date();
date.setDate(date.getDate() - 31);
var c_value=escape(value) + ((days==null) ? "" : "; expires="+date.toUTCString());
} else {
var date=new Date();
date.setDate(date.getDate() + days);
var c_value=escape(value) + ((days==null) ? "" : "; expires="+date.toUTCString());
}
document.cookie=c_name + "=" + c_value;
if (page!=0) {
window.location='<?=$adr?>'+page+'/success';
}
}
</script>