Я хотел бы знать, есть ли способ запретить PHP отправлять куки при вызове session_start ().
Да, если PHP говорит не использовать куки длясессий.Настройка PHP: session.use_cookies
:
ini_set('session.use_cookies', 0); # disable session cookies
session_start();
По умолчанию файлы cookie включены, поскольку они считаются более безопасными, чем параметры URL (см. Сеансы и безопасность Документы ).
(2) Наконец, у меня есть процесс постстраничного рендеринга (для статистики), который требует доступа на запись в сеанс.Сессия закрыта, я не могу снова вызвать session_start (), так как она отправляет куки, и для этого уже поздно.Это трудоемкий процесс, поэтому я должен сделать это после того, как страница отправлена клиенту.
Вероятно, можно сказать PHP, что cookie уже установлен, добавив его в $_COOKIE
суперглобальный массив Документы .Я никогда не экспериментировал с этим, но если вы используете session_start()
и PHP увидит, что cookie сеанса уже установлен (браузером, а не PHP, $_COOKIE
представляет куки браузера), он не будет отправлять заголовки (еще раз), чтобы установить cookie (который, как я понимаю, вам нужен).
Редактировать: Некоторые тестовые сценарии, с которыми можно поиграться:
<?php
header('Content-Type: text/plain;');
echo "Incomming Cookies:\n";
print_r($_COOKIE);
// to simulate that this is a new session, the session cookie is removed
// which makes PHP think it is a new session when invoking session_start()
// unset($_COOKIE['PHPSESSID']);
// run the first session
session_start(); // creates the session cookie (as we don't have one yet)
printf("Session %s has been started: %s\n", session_name(), session_id());
var_dump($_SESSION);
$_SESSION['variable'] = isset($_SESSION['variable']) ? $_SESSION['variable']++ : 0;
session_commit();
printf("Session has been closed, remaining id is: %s\n", session_id());
// visual confirmation that session cookie has been created
echo "Outgoing Cookies:\n";
print_r(headers_list());
// run the second session
ini_set('session.use_cookies', 0); # disable session cookies
session_start();
printf("Second session %s has been started: %s\n", session_name(), session_id());
var_dump($_SESSION);
$_SESSION['2nd-variable'] = isset($_SESSION['2nd-variable']) ? $_SESSION['2nd-variable']++ : 0;
session_commit();
Вы должны вызывать его через веб-браузер (и сеансы PHP должны быть настроены для работы).