Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемма с сесиями 
:(
    Опции темы
Flat
Дата 7.8.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



разбираюсь с сессими... вроде все заработало но вот ошибка достала )

 
Код
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\test1.ru\www\index.php:14) in Z:\home\test1.ru\www\index.php on line 21


как я понимаю ошибка что второй раз делаю старт сессий? ... вроде проверку вставил... правда все остальное что к сессиям привязано вроде робит... елсли эта ошибка не критична как ее убрать? 

вот index.php 
Код

<table border="0" width="100%" cellpadding="0" cellspacing="0">
    <tr>
        <td valign="top" align="left" width="100%" colspan=3 background="images/mainbg.jpg"> <img src="images/main.jpg" width="300" height="150" border="0" >            
        </td>
    </tr>
    <tr>
        <TD width="200" valign="top">
            <? 
                if(session_id() == '')
                session_start();
                include 'left.php';
                ?>
        <TD width=80% valign="top">
            <? 
            $do=$_GET['do'];
            if (!$do) 
                { include 'news.php';}    
            else
                { include "$do";}
            ?>
        </TD>
        <TD width=200 valign="top">
            верх
        </TD> 
    </tr>
    <tr>
        <TD width=100% colspan=3>
            низ
        </TD>    
    
    </tr>
</table>

PM MAIL   Вверх
Ипатьев
Дата 7.8.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Сессия отправляет НТТР заголовки.
Структура НТТР ответа такова, что в нем сначала идут заголовки, а потом - текст ответа. 
Если уже начался текст, то заголовок, разумеется, выдать уже нельзя. О чем тебе и пишет: headers already sent.
Вообще странно, что сессии работает. Разве что сессия изначально начинается в каком-то другом месте, где преждевременный вывод не мешает установить куку.

Вообще, этот фрагмент кода нарушает два правила
1. вся работа с заголовками должна веститсь до вывода в браузер.
2. в индексном файле не должно быть html кода.

PM MAIL   Вверх
Flat
Дата 7.8.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



да начинаеться вдругом месте ... которое инклюдиться в индекс.... авторизация ... хм.. а как средствами пхп создать таблицу? через echo? или лучше инклюдить еще 1 файл с разметкой таблицы?

мысль в том что весь контент будет выводиться через index.php.... да... щас сам задумался об индексации .... придеться переделывать

Это сообщение отредактировал(а) Flat - 7.8.2009, 20:25
PM MAIL   Вверх
Ипатьев
Дата 7.8.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Да, надо инклюдить файл с разметкой страницы.

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

Переменная $do, небось, передается через адрес? 
PM MAIL   Вверх
Flat
Дата 7.8.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



вощем вывод сдела эхами и все заробило спасибо

угу через $do через адрес... а что .. что то с этим не так? 

 
PM MAIL   Вверх
Ипатьев
Дата 7.8.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Странно. Как могла переделка на вывод эхами решить проблему. И зачем было вместо нормального хтмл делать непонятно что.
Ну да ладно. Что с $do не так? Да дыра это. Хрестоматийная.


PM MAIL   Вверх
Flat
Дата 8.8.2009, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



простите за тупизну... я еще только учусь... 
еще несколько вопросов

1 Что за дыра? обьясните пожалуста для понимания?
если  $do передавать через базу дыра исчезнет?


2. как ты и говорил сделал сесии до вывода html

Щас Index.php выглядит так 

Код

<?php
error_reporting (E_ALL);

if(session_id() == '')
session_start();

echo "
<html>

<head>
<meta http-equiv=Content-Type content=text/html; charset=windows-1251>
<title>Лучший софт</title>

<link rel=StyleSheet href=main.css type=text/css />


<body>

<table border=0 width=100% cellpadding=0 cellspacing=0>
    <tr>";
            include 'header.php';
    echo "</tr>
    <tr>
        <TD width=200 valign=top>
";

                include 'left.php';

        echo "<TD width=80% valign=top>";
            
            $do=$_GET['do'];
            if (!$do) 
                { include 'news.php';}    
            else
                { include "$do";}
            
        echo"</TD>
        <TD width=200 valign=top>
            верх
        </TD> 
    </tr>
    <tr>
        <TD width=100% colspan=3>
            низ
        </TD>    
    
    </tr>
</table>

</body>

</html>";

?>



Это сообщение отредактировал(а) Flat - 8.8.2009, 12:48
PM MAIL   Вверх
bars80080
Дата 8.8.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



дыра в $do в том, что ты открыто передаёшь имя подключаемого модуля, а затем инклудишь его.
пример: допустим, у тебя где-то есть возможность загружать файлы на сервер и злодей загружает не обычную картинку, а свой файл с кодом. затем он подменяет в адресе &do=имя_своего_файла и подключает его в код. в итоге он может что-угодно сделать. либо ещё проще, он просто подставляет имя какого-нибудь конфига или другого, обычно закрытого файла, и в итоге может получить некую информацию, которую в теории могут видеть только администраторы

передавать надо id модуля, в идеале - число: &do=5
потом в БД находить по id адрес этого модуля и инклудить, применяя все нужные проверки на доступ пользователя к этому модулю
PM MAIL WWW   Вверх
Ипатьев
Дата 8.8.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Flat @  8.8.2009,  07:24 Найти цитируемый пост)
если  $do передавать через базу дыра исчезнет?

Нет, не исчезнет.
Передаваемый параметр надо проверять в любом случае, какой бы механизм не использовался.
И вообще, передать что-либо через базу данных невозможно. В браузере у пользователя базы данных нету. И она из браузера ничего не передаст.

Это же касается и п.2

Цитата(Flat @  8.8.2009,  07:24 Найти цитируемый пост)
Щас Index.php выглядит так 

Ну и зачем было переделывать все на echo? Неужели серый HTML без кавычек воспринимается и работает лучше?
Речь шла совсем о другом.
PM MAIL   Вверх
Flat
Дата 8.8.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет




Добавлено @ 12:57
Цитата(Ипатьев @ 8.8.2009,  12:49)
Цитата(Flat @  8.8.2009,  07:24 Найти цитируемый пост)
если  $do передавать через базу дыра исчезнет?

Нет, не исчезнет.
Передаваемый параметр надо проверять в любом случае, какой бы механизм не использовался.
И вообще, передать что-либо через базу данных невозможно. В браузере у пользователя базы данных нету. И она из браузера ничего не передаст.

Это же касается и п.2

Цитата(Flat @  8.8.2009,  07:24 Найти цитируемый пост)
Щас Index.php выглядит так 

Ну и зачем было переделывать все на echo? Неужели серый HTML без кавычек воспринимается и работает лучше?
Речь шла совсем о другом.

1 дошло по первому вопросу... будет отдельная база страниц а передаваться тока ID на эту страницу... 

2 не лучше читаеться конечно... но так проще разорвать его, чтобы например мета-теги вставить ... но то что ты преложил тоже дошло... 

3 щас думаю как индентификатор сессии передать не через строку и не через кукис ) 

Это сообщение отредактировал(а) Flat - 8.8.2009, 12:58
PM MAIL   Вверх
Ипатьев
Дата 8.8.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
будет отдельная база страниц а передаваться тока ID на эту страницу... 

Ну, если страницы представляют собой только текст, то их изначально следовало хранить в базе.
Но если это php код, то ему-то что в базе делать?

Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
но так проще разорвать его

Это шутка?
Писать кучу эхо с частоколом слешей проще, чем написать ?><?
?
Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
но то что ты преложил тоже дошло... 

я не совсем в этом уверен

Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
щас думаю как индентификатор сессии передать не через строку и не через кукис ) 

Думать, вообще, всегда полезно, но в данном случае результат будет нулевым. Никак.
PM MAIL   Вверх
Flat
Дата 8.8.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 29.12.2003

Репутация: нет
Всего: нет



Цитата(Ипатьев @ 8.8.2009,  13:02)
Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
будет отдельная база страниц а передаваться тока ID на эту страницу... 

Ну, если страницы представляют собой только текст, то их изначально следовало хранить в базе.
Но если это php код, то ему-то что в базе делать?


Это шутка?
Писать кучу эхо с частоколом слешей проще, чем написать ?><?
?
Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
но то что ты преложил тоже дошло... 

я не совсем в этом уверен

Цитата(Flat @  8.8.2009,  12:49 Найти цитируемый пост)
щас думаю как индентификатор сессии передать не через строку и не через кукис ) 

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

1. база будет не из самих страниц... а из ссылок на страницы... 
 те страницы которые будут содержать только тексты будут храница в также базе

2 вечером переделаю

3. .... пока мыслей нет... 

4. спасибо за помощь и тебе и bars80080
  
PM MAIL   Вверх
Ипатьев
Дата 8.8.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Flat @  8.8.2009,  15:13 Найти цитируемый пост)
база будет не из самих страниц... а из ссылок на страницы... 

А какой смысл в таком извращении?

Цитата(Flat @  8.8.2009,  15:13 Найти цитируемый пост)
3. .... пока мыслей нет... 

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


Это сообщение отредактировал(а) Ипатьев - 8.8.2009, 15:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1051 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.