Это не будет устанавливать сессию? - PullRequest
0 голосов
/ 28 июля 2010

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

Я не получаю ошибок.

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

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

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

в строке 221 есть: header ("Местоположение: home.php");

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

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

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

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

Предупреждение: session_start () [function.session-start]: Невозможно отправить cookie сессии - заголовки уже отправлены (вывод начался с 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 в строке 117

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

строка 117 theres header("Location: index.php") и может быть перенаправлена, если вы не вошли в систему (набор сеансов / набор файлов cookie)

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

Спасибо

Обновление:

Вот 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. Я включаю файл top.php ПОСЛЕ раздела функции doLogin в index.php, чтобы с заголовками не возникало ошибок.

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

Ответы [ 4 ]

4 голосов
/ 28 июля 2010

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

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

Итак:

<?php
session_start();

?>
<html>
<head>
...

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

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

Обновление:

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();
    }

Итак, если значения cookie не существуют, что, по вашему мнению, происходит здесь?

4 голосов
/ 28 июля 2010

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

0 голосов
/ 28 июля 2010

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

Аналогично строка 2 индекса.php

0 голосов
/ 28 июля 2010

Я бы предположил:

Вы выдали

die();

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

???

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

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

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

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

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

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

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

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