Проблема с сессией в php - PullRequest
0 голосов
/ 08 июня 2011

Код:

<?php
include ("conf/conf.php");
include ("classes/dbhelper.php");
$conf = new Dbconf();
$dbURL = $conf->get_databaseURL();
$dbUName = $conf->get_databaseUName();
$dbPword = $conf->get_databasePWord();
$dbName = $conf->get_databaseName();
$nameOfDbWithWorkers = $conf->get_nameOfDbWithWorkers();

if($_POST['auth']){
    $login = trim(($_POST['login']));
    $pass = trim($_POST['pass']);  

    $dbHelp = new DbHelper($dbURL, $dbUName, $dbPword, $dbName, $nameOfDbWithWorkers);
    $userType = $dbHelp->getUser($login, $pass);

    switch ($userType){
    case "admin":
        startSession($login, $pass);
        header("Location: adminpage.php");
        break;  
    case "user": 
        startSession($login, $pass);
        header("Location: operatorpage.php");
        break;
    case "nomatch": 
    echo 
    '<html> 
    <body> 
    <table width=100% height=100% border=0 cellpadding=0 cellspacing=0> 
        <tr valign="center" align="center">
            <td> 
                <form action="authorize.php" method="post">
                Логин:<input type="text" name="login"><br>
                Пароль:<input type="password" name="pass"><br>
                <input type="submit" name="auth">
                <font color = red> Неправильный пароль или логин</font>  
            </td>
        </tr>
    </table>

    </form>
    </body> 
    </html>';
        break;
    }       
}
else{
    header("Location: index.php");
}
    function startSession($login, $pass){
        session_start();
        $_SESSION['login'] = $login;
        $_SESSION['pass'] = $pass;
        $_SESSION['usr_id'] = md5(crypt($login,$pass));
    }

Когда я ввожу правильный логин и передаю информацию, у меня появляются следующие ошибки.

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\ecl.ru\www\classes\dbhelper.php:24) in Z:\home\ecl.ru\www\authorize.php on line 20

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\ecl.ru\www\classes\dbhelper.php:24) in Z:\home\ecl.ru\www\authorize.php on line 53

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\ecl.ru\www\classes\dbhelper.php:24) in Z:\home\ecl.ru\www\authorize.php on line 53

Как это решить?

Ответы [ 6 ]

2 голосов
/ 08 июня 2011

Вам нужно начать сеанс, прежде чем что-то делать. Прочитать документы .

1 голос
/ 08 июня 2011

В вашем файле dphelper.php выводится что-то, как говорится в уведомлении:

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\ecl.ru\www\classes\dbhelper.php:24) in Z:\home\ecl.ru\www\authorize.php on line 20

Поскольку заголовки отправляются перед любым видом вывода, ваш session_start () приходит слишком поздно.Одно предложение, как уже говорили, состоит в том, чтобы поместить session_start () поверх файла, другое (может быть реализовано вместе с первым) - заглянуть в dbhelper.php и убедиться, что он ничего не выводит (изимя файла - все равно не должно)И когда я говорю «output», это не обязательно echo / print / etc, это также может быть пробел после закрывающего тега php в конце файла.

1 голос
/ 08 июня 2011

Начните сессию перед использованием заголовков

1 голос
/ 08 июня 2011

Вы можете обойти это, включив буферизацию вывода , чтобы заголовки всегда отправлялись перед данными.

0 голосов
/ 08 июня 2011

Просто поставьте session_start(); сверху перед вашими включениями, чтобы при вызове функции startSession в любом месте вашего кода она просто установила любые значения, которые вы присваиваете $ _SESSION.

0 голосов
/ 08 июня 2011

Глядя на ваш код, вы явно не отправляете контент до начала сеанса, однако у вас есть вызовы различных функций. Кто-нибудь из них выводит контент?

Это полный файл? Даже возврат строки до <?php будет считаться контентом, отправленным в браузер ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...