Перейти к содержанию
ikarus

Cannot send session cookie и пр.

Рекомендуемые сообщения

Иногда (закономерности не найдены) в журнале (и не только в нем) появляется следующее:

2014-08-17 19:14:01 - PHP Warning:  session_start(): Cannot send session cookie - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/system/library/session.php on line 11

2014-08-17 19:14:01 - PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/system/library/session.php on line 11

2014-08-17 19:14:01 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/index.php on line 173

2014-08-17 19:14:01 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/system/library/currency.php on line 59

2014-08-17 19:14:01 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/catalog/controller/common/home.php on line 19

2014-08-17 19:14:01 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/catalog/controller/module/region.php on line 18

2014-08-17 19:14:01 - PHP Warning:  Cannot modify header information - headers already sent by (output started at /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100) in /home/d/denisyzx/klinkerburg.ru/public_html/catalog/controller/module/region.php on line 19

 
Сами строки:
 
system/library/session.php

                if (!session_id()) {
			ini_set('session.use_cookies', 'On');
			ini_set('session.use_trans_sid', 'Off');

			session_set_cookie_params(0, '/');
(11)			[color=#b22222]session_start();[/color]
		}

index.php

        if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {	  
(173)	 [color=#b22222]setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);[/color]
        }	

system/library/currency.php

        if (!isset($this->request->cookie['currency']) || ($this->request->cookie['currency'] != $currency)) {
(59)	 [color=#b22222]setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);[/color]
        }

catalog/controller/common/home.php

     //last-modified if-modified
	$date_modified = strtotime($this->config->get('config_mdate'));
	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
		$modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
		if ($modified_since >= $date_modified) {
			header("HTTP/1.1 304 Not Modified ");
			exit();
		}
	}
(19)	[color=#b22222]header("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");[/color]	
     //

catalog/controller/module/region.php

     if (isset($this->request->cookie['stock_place']) && $this->request->cookie['stock_place']) {
	$this->data['stock_place'] = $this->request->cookie['stock_place'];
	$this->data['auto_show'] = isset($this->request->cookie['auto_show']) ? $this->request->cookie['auto_show'] : 2;
     } else {
	$stockroom = $this->config->get('config_stockroom');
(18)	[color=#b22222]setcookie('stock_place', $stockroom, time() + 60 * 60 * 24 * 30, '/');[/color]
(19)	[color=#b22222]setcookie('auto_show', 1, time() + 60 * 60 * 24 * 30, '/');[/color]
	$this->data['stock_place'] = $stockroom;
	$this->data['auto_show'] = 1;
     }

А идей никаких  :(  Или нельзя так печеньки делать и ласт-модифед в не положенном месте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для отправки http заголовков используйте встроенный класс document:

$this->document->addHeader('HTTP/1.1 304 Not Modified'); 

Вероятнее всего из-за этого и ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для отправки http заголовков используйте встроенный класс document:

$this->document->addHeader('HTTP/1.1 304 Not Modified'); 

Вероятнее всего из-за этого и ошибка.

 

хмм, попробую, спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только вот так:

$this->response->addHeader('HTTP/1.1 304 Not Modified'); 

но в таком случае интересное происходит, при таком варианте:

//last-modified if-modified
	$date_modified = strtotime($this->config->get('config_mdate'));
	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
		$modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
		if ($modified_since >= $date_modified) {
			//header("HTTP/1.1 304 Not Modified ");
                        $this->response->addHeader("HTTP/1.1 304 Not Modified ");
			exit();
		}
	}
	//header("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
        $this->response->addHeader("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
     //

last-modified отдается а вот not-modified нет  ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только вот так:
$this->response->addHeader('HTTP/1.1 304 Not Modified');
но в таком случае интересное происходит, при таком варианте:
//last-modified if-modified
$date_modified = strtotime($this->config->get('config_mdate'));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$modified_since = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if ($modified_since >= $date_modified) {
//header("HTTP/1.1 304 Not Modified ");
$this->response->addHeader("HTTP/1.1 304 Not Modified ");
exit();
}
}
//header("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
$this->response->addHeader("Last-Modified: " . gmdate("D, d M Y H:i:s", $date_modified) . " GMT");
//
last-modified отдается а вот not-modified нет  ;)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ikarus

та открой ты /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100 и разберись с ошибкой.

что за манечка фантазировать, философствовать и тянуть за уши левый код при КОНКРЕТНОЙ ОШИБКЕ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ikarus

та открой ты /home/d/denisyzx/klinkerburg.ru/public_html/index.php:100 и разберись с ошибкой.

что за манечка фантазировать, философствовать и тянуть за уши левый код при КОНКРЕТНОЙ ОШИБКЕ?

 

та первым делом глядел, что тут на 100ой строке не так может быть, все переменные отрабатывают, синтаксис в порядке:

function error_handler($errno, $errstr, $errfile, $errline) {
	global $log, $config;
	
	switch ($errno) {
		case E_NOTICE:
		case E_USER_NOTICE:
			$error = 'Notice';
			break;
		case E_WARNING:
		case E_USER_WARNING:
			$error = 'Warning';
			break;
		case E_ERROR:
		case E_USER_ERROR:
			$error = 'Fatal Error';
			break;
		default:
			$error = 'Unknown';
			break;
	}
		
	if ($config->get('config_error_display')) {
		echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
	}
	
	if ($config->get('config_error_log')) {
		$log->write('PHP ' . $error . ':  ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);
	}

	return true;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну так отключи вывод ошибок на страницу, оставив только запись в лог.

и исправляй после этого то, что упадет в лог.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну так отключи вывод ошибок на страницу, оставив только запись в лог.

и исправляй после этого то, что упадет в лог.

:) все так и сделал сразу, только ошибка до сих пор не появилась, очень такая плавающая ошибка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот выловил наконец-то: 

PHP Warning:  session_start(): open(/tmp/php_sess/sess_c61f8d49ae0cdb6337057d6d2d23a0bb, O_RDWR) failed: Permission denied (13) in /home/d/denisyzx/klinkerburg.ru/public_html/system/library/session.php on line 10 

странное дело однако:

denisyzx@xray:/tmp [0] $ ls -l | grep 'php_sess'
drwxrwxrwt 2 root   root  1170300 авг.  26 08:50 php_sess

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

O_RDWR при root:root точно не плавающая ошибка.

она бы у вас постоянно сыпалась.

создайте директорию в окружении своей учетной записи, но обязательно ВЫШЕ, чем htdocs (или что там у вас, где файлы магазина лежат).

и задайте в index.php новый путь для сохранения сессий через session_save_path('тут/новый/путь/');

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

O_RDWR при root:root точно не плавающая ошибка.

она бы у вас постоянно сыпалась.

 

однако же я её сутки ждал, и это при почти 300 посещениях

 

создайте директорию в окружении своей учетной записи, но обязательно ВЫШЕ, чем htdocs (или что там у вас, где файлы магазина лежат).

и задайте в index.php новый путь для сохранения сессий через session_save_path('тут/новый/путь/');

 

создал сразу, но так и не понял как задать новый путь, такой директивы в index.php нет, куда её воткнуть?

// Session
$session = new Session();
session_save_path('/home/d/denisyzx/tmp/php_sess/');
$registry->set('session', $session);

окей или не окей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не окей.

надо перед:

$session = new Session();

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо, я правда уже через .htaccess сделал, жду ошибок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.