2010-07-27 2 views
0

У меня есть эта система входа в систему php, я отлично работал на localhost, я купил веб-отель, и теперь он больше не работает, и я не могу найти, где это происходит.Он не будет устанавливать сеанс?

У меня нет ошибок.

Страница входа находится в index.php, и когда вы входите в систему, и если все в порядке (без ошибок/неправильных действий и т. Д.), Вы будете перенаправлены на home.php.

Это не тот случай. Когда я вхожу в систему, он просто обновляет index.php и выводит это вверху:

Предупреждение: не удается изменить информацию заголовка - заголовки, уже отправленные (httpd.www/oBz/index.php: 2) в httpd.www /oBz/index.php в строке 221

на линии 221 есть: header ("Location: home.php");

ОК, поэтому я пошел домой home.php вручную, указав адрес. Теперь в home.php у меня есть это в верхней части:

include 'dbc.php'; 
page_protect(); 
echo "HELLO WORLD"; 

page_protect проверяет, есть ли какие-либо сеансы набор или печенье (помните меня), но если что-то было установлено, вы увидите содержание «HELLO WORLD» иначе вы не будете ,

Но сейчас, когда я вхожу home.php Я просто получить это:

Внимание: session_start() [function.session-начало]: Не удается отправить куки сессии - заголовки уже прислал (выход начался в httpd.www/oBz/dbc.php: 29) в httpd.www/oBz/dbc.php в строке 69
Предупреждение: session_start() [function.session-start]: Не удается отправить ограничитель кеша сеанса - уже отправленные заголовки (вывод начался на httpd.www/oBz/dbc.php: 29) в httpd.www/oBz/dbc.php в строке 69
Предупреждение: невозможно изменить информацию заголовка - заголовки, уже отправленные (вывод запущен по адресу httpd.www/oBz /dbc.php:29) в httpd.www/oBz/dbc.php on line 117

линия 69 Theres session_start(), и это первая строка в функции page_protect();

линия 117 Тереза ​​header("Location: index.php") и есть перенаправление, если вы не вошли в систему (сессионный набор/печенье набор)

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

Спасибо

Update:

Вот dbc.php: http://phpbin.net/x/999009567

** index.php, где вы войти и где сеансом устанавливает http://phpbin.net/x/1564167411

** UPDATE: теперь я решала заголовок предупреждения/ошибки, но это было не решение вопроса сессии!

** UPDATE: phpbin.net/x/25857430 обновленный dbc.php, весь html, который был в dbc.php, ранее находится в новом файле top.php. Я включаю верх.php ПОСЛЕ раздела doLogin в index.php, поэтому никаких ошибок с заголовками не возникает.

*** ОБНОВЛЕНИЕ: Проблема здесь: http://phpbin.net/x/557713701 Вот почему ее перенаправление меня на index.php все время

+0

Итак, можно ли увидеть dbc.php? – spinon

+0

http://phpbin.net/x/999009567 – Karem

ответ

4

Вы уже отправили вывод в браузер со всем, что HTML, который существует до первого бита PHP.

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

Итак:

<?php 
session_start(); 

?> 
<html> 
<head> 
... 

Самый простой ответ может быть, чтобы переместить все, что HTML после кода PHP. Там есть звонок session_regenerate_id() и еще один session_start() в функции logout.

В любом случае, почему у вас есть HTML в этом файле? Помимо функций сеанса я обнаружил не менее 2 header() звонков.

Update:

if(isset($_COOKIE['user_id']) && isset($_COOKIE['user_key'])){ 
    /* we double check cookie expiry time against stored in database */ 

// I snipped a bunch of code, to point out what's going on here 

    } else { 
    header("Location: index.php"); 
    die(); 
    } 

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

+0

Я сделал то, что вы сказали, перестроил код, переместил все html в другой файл (top.php), поэтому я просто назову это для html-материала, это очистило предупреждает, но не исправил решение. – Karem

+0

@karem. Существует множество причин, по которым он может перенаправлять на index.php. Найти каждый заголовок («Location: index.php»); «вызывать и отлаживать код до этого. например, –

+0

@ Печенье George Marian не устанавливаются, если вы не указали «помнить», но я думаю, что у вас сеансы. У меня есть 2 заголовка location.php, одна функция выхода из системы, и один, если установлен либо cookie, либо сеанс – Karem

4

Вы смотрите на неправильные биты сообщения об ошибке. Часть, на которую вы смотрите, это то, где она пытается отправить заголовки (то есть: где она понимает, что что-то не так). Соответствующая часть, однако, является частью, в которой она начала выпускать продукцию. Для первой ошибки он говорит, что выход был уже запущен на index.php, строка 2. У вас, вероятно, есть пробел перед вашим открытием тега <?php. Я бы проверить, что первый ...

+0

, пожалуйста, проверьте загруженный файл dbc.php. Нет, у меня нет пробела infront от Karem

+0

@ Карем хорошо может быть после?> Тега.Почему вы не можете проверить линию 29 самостоятельно? –

+0

У вас есть выход перед тегом. session_start() должен быть вызван перед любым выходом. Причина, по которой она, вероятно, работала на вашем сервере localhost, была включена буферизация вывода (было бы моим предположением). Простой ' 'перед' 'должен решить проблему (и, конечно, удалить ее из этой функции). –

0

Я думаю:

ли вы выдаете

die(); 

После header("Location: home.php");

???

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

Кроме того, пожалуйста, убедитесь, что кодировка хорошая, должен быть UTF-8? Иногда я его неправильно себя :(

Хорошо, обновленный ответ.

266 header("Location: index.php"); 

303 header("Location: home.php"); 

340 header("Location: home.php"); 

Вы не выпускались Die() после этих трех линий Так что это может быть риск :)

+0

Я использовал exit(); Я попробовал die(); У меня все еще есть ошибки заголовков, но я только выяснил, что проблема не связана с сеансом. – Karem

+0

@Karem: уточните мой обновленный ответ –

+0

Я выпустил die(); теперь, еще ничего :( – Karem

0

И строка 29 из dbc.php является эхом или печатанием или генерирует некоторый вывод в браузер ... так что же это код в dbc.php вокруг этой строки?

Аналогично линии 2 из index.php

+0

, пожалуйста, уточните обновленный вопрос для dbc.php – Karem

Смежные вопросы