PHP - пользователь авторизуется автоматически - PullRequest
0 голосов
/ 01 октября 2011

У меня очень странная проблема.Если кто-то входит на мою страницу, а затем выходит из системы, он автоматически снова входит в систему при посещении страницы входа.Согласно моему расширению 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...