Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: Cannot modify header information - headers already sent by
 
 автор: Webmaster-X   (11.01.2007 в 19:22)   письмо автору
 
 

пишу скрипт на админку с авторизацией через куки. на локальном сервере работает а на хостинге нихочет выбивает ошибки


Warning: Cannot modify header information - headers already sent by (output started at /var/www/site/index.php:19) in /var/www/site/index.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /var/www/site/index.php:19) in /var/www/site/index.php on line 8


подскажите в чём проблема, что неоходимо для правильной работы с setcookie

возможно я допустил ошибки при "чистописании" так как с куками работаю первый раз
ниже привожу пример скрипта, если чё нетак - тыкните пальцом....



<?
@session_start();

function 
cooksa()
{
           global 
$name_user$pass_user;
                      
setcookie("name",$name_user,time()+24*60*60);
                      
setcookie("pass",$pass_user,time()+24*60*60);
}


        
$str[0] = "111111";
        
$str[1] = "111111";

define("INDEX""yes");

include 
"inc/include/config.php";

if(!empty(
$_POST['name']) && !empty($_POST['pass']))
{
            if((
$str[0] == $_POST['name']) && md5($str[1]) == md5($_POST['pass']))
            {
                      
$name_user$str[0];

                      
$pass_usermd5($str[1]);
                      
cooksa();

                      print 
"<meta http-equiv=refresh content='0; url=index.php?show=index'>\n";
            }
}


if ((!empty(
$_COOKIE['name'])) or (!empty($_COOKIE['name'])))
{
            if (
$_COOKIE['name'] != $str[0] || $_COOKIE['pass'] != md5($str[1]))
            {
                        include 
"inc/templates/" $admin_config['templates'] . "/form.tpl";
                        exit;
            }
            else
            {

                        
$url =  $_SERVER['REQUEST_URI'];
                        
$array explode("/",$url);

                        
$count=count($array);

                        
$count-=1;

                        if (
$array[$count] == "index.php" || $array[$count] == null)
                        {
                                    print 
"<meta http-equiv=refresh content='0; url=index.php?show=index'>\n";
                        }
                        else
                        {

                                    include 
"inc/include/http/http.php";

                                    
$CurSec=empty($_GET['show'])?null:$_GET['show'];

                                    if(empty(
$CurSec))

                                            include(
"./inc/index.php");

                                    elseif(
file_exists("./inc/".basename($CurSec).".php"))

                                            include(
"./inc/".basename($CurSec).".php");

                                    else
                                    {
                                            die(
"Tакой страницы не существует");
                                    }
                        }
           }
}
else
{
            
$url =  $_SERVER['REQUEST_URI'];

            
$array explode("/",$url);

            
$count=count($array);

            
$count-=1;

            if (
$array[$count] == "index.php" || $array[$count] == null)
            {
                        include 
"inc/templates/" $admin_config['templates'] . "/form.tpl";
                        exit;
            }
            else
            {
                   @
Header("Location: index.php");
            }
}
?>


form.tpl


              <table width="100%" height="100%">
                <tr>
                  <td align="center" valign="middle">
                    <table width="250" align="center" style="border: 1 #526396 solid">
                      <tr>
                        <td align="center">
                        <form name="FormName" action="" method="post">
                        <br><br><input name="name" type="text"><br><br>
                        <input name="pass" type="password"><br><br>
                        <input type="submit" value="&#194;&#213;&#206;&#196;">
                        </form>
                        </td>
                      </tr>
                    </table>
                  </td>
                </tr>
              </ftable>

   
 
 автор: ddhvvn   (11.01.2007 в 19:35)   письмо автору
 
   для: Webmaster-X   (11.01.2007 в 19:22)
 

Выводу заголовков не должен предшествовать НИКОЙ другой вывод информации.
А куки ставятся, как раз через заголовки
Сначала устанавливай куки, потом выводи инфу через echo

   
 
 автор: LuxeMate   (11.01.2007 в 19:46)   письмо автору
 
   для: ddhvvn   (11.01.2007 в 19:35)
 

>Выводу заголовков не должен предшествовать НИКОЙ другой вывод информации.
Как сказал cheops....это толькое если отсутствует буферизация или что то такое....у меня почему то всегда как не делай работало))

   
 
 автор: Webmaster-X   (11.01.2007 в 19:57)   письмо автору
 
   для: LuxeMate   (11.01.2007 в 19:46)
 

а, чтоже можна сделать?

я пробывал в самом верху скрипта ставить куки - ошибок не выдавал но куки не записывались.
хотя если ставить какойто толковый скрипт(и без htaccess средств) - всё работает.....

   
 
 автор: Sergey89   (11.01.2007 в 20:18)   письмо автору
 
   для: LuxeMate   (11.01.2007 в 19:46)
 

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

   
 
 автор: Webmaster-X   (11.01.2007 в 20:25)   письмо автору
 
   для: Sergey89   (11.01.2007 в 20:18)
 

>При буфферизации вывод информации не происходит, а накапливается в некий буффер, который может быть сброшен в любой момент.

тоесть если я правильно понял, неоходимо сбросить буфер перед записыванием куков?

если да, тогда как это сделать?

   
 
 автор: Sergey89   (11.01.2007 в 20:56)   письмо автору
 
   для: Webmaster-X   (11.01.2007 в 20:25)
 

Нет. Вот пример с использованием буфферазации.

Предупреждение есть:
<?php
print 'Hello world!';
session_start();
$_SESSION['count']++;
print 
$_SESSION['count'];
?>
<a href="?">Обновить</a>


Нет:
<?php
ob_start
();

print 
'Hello world!';
session_start();
$_SESSION['count']++;
print 
$_SESSION['count'];

ob_end_flush();
?>
<a href="?">Обновить</a>

   
 
 автор: NIK   (11.01.2007 в 21:38)   письмо автору
 
   для: Webmaster-X   (11.01.2007 в 20:25)
 

есть вариант устанавливать куки средствами JS. Тогда можно устанавливать куку когда угодно. Вот скрипт:


function SetCookie (name, value, expires, path, domain, secure) {
  document.cookie = name + "=" + escape(value) +
                    ((expires) ? "; expires=" + expires : "") +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    ((secure) ? "; secure" : "");
}


если что не понятно, то ищи на гугле по запросу Работа с Cookie в JavaScript - статей на эту функцию много везде с подробным описанием.

   
 
 автор: skazi   (11.01.2007 в 23:55)   письмо автору
 
   для: NIK   (11.01.2007 в 21:38)
 

Куки - очень не безопасно!
Будет большая вероятность взломать твою систему..

   
 
 автор: Sergey89   (11.01.2007 в 23:59)   письмо автору
 
   для: skazi   (11.01.2007 в 23:55)
 

Угу. Лучше юзать сессии. И запоминать админа только на текущий сеанс. При запуске нового сеанса требовать ввода имени и пароля.

   
 
 автор: Webmaster-X   (12.01.2007 в 11:49)   письмо автору
 
   для: Sergey89   (11.01.2007 в 23:59)
 

скажите, я изменил начало скрипта и всё заработало
привожу пример, скажите это провильно или нет?

<?
@session_start();

ob_start();

error_reporting(1);

        
$str[0] = "111111";
        
$str[1] = "111111";





ob_end_clean();


define("INDEX""yes");

include 
"inc/include/config.php";

if(!empty(
$_POST['name']) && !empty($_POST['pass']))

//продолжение выше
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования