PHP устанавливает куки в дочернем классе - PullRequest
1 голос
/ 16 апреля 2010

Я пишу пользовательский обработчик сеанса, и я не могу получить cookie-файл, чтобы установить его. Я ничего не выводил в браузер, пока не установил cookie, но он все равно не работает. Это убивает меня.

Файл cookie будет установлен, если я установлю его в сценарии, который я определяю, и вызову обработчик сеанса. При необходимости выложу код. Есть идеи, люди?

<?php




/* require the needed classes comment out what is not needed */
require_once("classes/sessionmanager.php");
require_once("classes/template.php");
require_once("classes/database.php");


$title=" ";  //titlebar of the web browser
$description=" ";  
$keywords=" ";  //meta keywords
$menutype="default";  //default or customer, customer is elevated
$pagetitle="dflsfsf "; //title of the webpage
$pagebody=" ";  //body of the webpage


$template=template::def_instance();
$database=database::def_instance();

$session=sessionmanager::def_instance();
$session->sessions();
session_start();
?>

и это тот, который фактически устанавливает cookie для сессии

* +1007 *

код обновлен. все еще не повезло

по какой-то причине, если какой-либо html отображается после запуска менеджера сеанса, cookie вызывается после html. это не имеет никакого смысла для меня

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Проблема, скорее всего, в ваших if/else заявлениях. Вы используете:

if($auth = TRUE AND $newsession = FALSE)
...
elseif($newsession = TRUE)

Использование одного = означает, что вы присваиваете значений, а не сравниваете их. Вам нужно использовать == вместо = .

Изменить на это:

if($auth == TRUE AND $newsession == FALSE)
...
elseif($newsession == TRUE)

С кодом, который у вас есть прямо сейчас, первый if блок вашего кода будет выполняться каждый раз, поэтому ваш setcookie() вызов никогда не будет достигнут.

0 голосов
/ 16 апреля 2010

setcookie () возвращает false, если php не может добавить заголовок. Так что для отладки попробуйте что-то вроде

 setcookie("rndn",$cookieval) or die('setcookie failed');

Вы можете комбинировать это с проверкой, вызывается ли setcookie () в первую очередь

$rc = setcookie("rndn",$cookieval);
/* DEBUG-code don't forget to remove me */
error_log(sprintf("%s %s\n", date('Y-m-d H:i:s setcookie():'), $rc?'success':'failed'));

(или даже лучше использовать отладчик, например xdebug и, например, netbeans в качестве внешнего интерфейса).

Проверяли ли вы заголовки ответов в вашем браузере? Например. через расширение firebug . Возможно, клиент получает заголовок cookie, но не принимает его.

0 голосов
/ 16 апреля 2010

В соответствии с кодом тура, по крайней мере, вы должны установить каталог / в параметрах cookie.
Но в любом случае, в первую очередь вы должны прослушивать куки из журнала HTTP. Вы можете использовать Firebug, чтобы посмотреть, установил ли сервер какой-либо файл cookie и отправил ли браузер обратно

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