Я хотел бы знать, есть ли способ предотвратить отправку cookie PHP при вызове session_start()
.Предотвратить php session_start(), чтобы отправить файл cookie
Мой случай использования для оптимизации сайта:
- (1a) Я первым открыть сеанс/отправить заголовки.
- (1b) Затем генерируйте и выводите текстовое содержимое.
- (1c) Чтобы улучшить сеанс чтения/записи, я вызываю «session_write_close», как только мне больше не нужно писать в сеансе.
- (2) Наконец, у меня есть процесс рендеринга после страницы (для статистики), для которого требуется доступ на запись к сеансу. Сеанс закрыт, я не могу снова вызвать session_start(), так как он отправляет файл cookie, и для него это поздно. Это сложный процесс вычисления, поэтому я должен сделать это после отправки страницы клиенту.
Клиент уже получил сеансовое печенье. Поэтому мне не нужно session_start()
, чтобы отправить новый (и избыточный).
Кто-нибудь знает способ перехватить файл cookie или что-то подобное? Конечно, я хочу избежать «Не могу отправить сессию cookie - уже отправленные заголовки». Эта ошибка невидима для пользователя, поскольку страница уже визуализирована, но в журналах она выглядит уродливой.
Мой вопрос кажется избыточным, но это не так. Я знаю, как работают заголовки и содержимое (сначала отправляйте заголовки, потом контент). Просто PHP не позволяет мне делать то, что я хочу.
Великий, первый решение работает 'ini_set ('session.use_cookies', 0)'. Второе решение, похоже, не имеет каких-либо эффектов (я уже пробовал это вчера), но он может быть относительно моей конфигурации php. Я потрачу еще немного времени на это второе решение. Благодаря ! – Mat
Я провел несколько тестов с '$ _COOKIE'. Он действительно работает, но это будет то же самое, что использовать 'ini_set();' и с 'ini_set()' более ясно, что он делает. Я добавлю скрипт к ответу, который я использовал для воспроизведения, прокомментирован какой-то код о '$ _COOKIE'. Раскомментируйте его, чтобы сгенерировать новый идентификатор сеанса для первого сеанса. Это также показывает, как '$ _COOKIE' связано с' session_start() '. – hakre
'ini_set ('session.use_cookies', '0');' отлично работает для заголовка файла cookie, но не для заголовка кэша, который истекает из файла cookie SID. См. Ответ @techdude для использования 'session_start (['use_cookies' => '0', 'cache_limiter' => '']);' – Code4R7