Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Cannot send session cookie и пр.


Recommended Posts

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

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'); 

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

 

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

Надіслати
Поділитися на інших сайтах

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

$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);

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.