Nano Hash - криптовалюты, майнинг, программирование

Создан $_SESSION, но нет PHPSESSID в $_SERVER['HTTP_COOKIE']

У меня возникают странные проблемы с переменными SESSION в моей онлайн-корзине PHP/Ajax.

Когда я впервые просматриваю страницу, СЕССИЯ создается и работает на странице. Затем, когда я перехожу на другую страницу PHP в том же каталоге, СЕССИЯ полностью теряется. Странно то, что это происходит только один раз. Как только пользователь проходит через этот процесс полной потери СЕССИИ при смене страницы, СЕССИЯ работает в полном объеме по всей корзине.

Я начал рассылать себе var_exports данных $_SESSION и $_SERVER при каждом просмотре страницы. Кажется, что при первом просмотре страницы СЕССИЯ существует и содержит данные. Однако в переменной $_SERVER['HTTP_COOKIE'] не создается PHPSESSID. При переходе на другую страницу создается PHPSESSID, и SESSION начинает работать, но исходные данные SESSION первого просмотра страницы теряются.

Есть ли способ сгенерировать PHPSESSID, если он еще не был сгенерирован для SESSION? Или это типичное поведение и не имеет отношения к моей случайной проблеме потери СЕССИИ? Я использую PHP 5.2.

Каждая страница в корзине начинается одинаково:

$title="Title";
$keywords="keywords";
$description="description";
@include('../header_cart.php');

А потом вверху header_cart.php есть:

session_start();
if(!isset($_SESSION['active'])){
    $_SESSION['active']=$_SERVER['REMOTE_ADDR'];
}

  • Разнообразное чтение здесь. Я не знаю, проверили ли вы это уже. Вы уверены, что ваш session_start() не выходит из строя при первом звонке? 18.01.2012
  • Каждая страница в корзине использует один и тот же файл заголовка, так что я не думаю, что дело в этом. Возможно, использование session_regenerate_id(), если PHPSESSID не установлен, может помочь. 18.01.2012
  • Но тогда вы можете потерять информацию о своей корзине из-за изменения сеанса? знак равно 18.01.2012
  • Документы PHP говорят, что session_regenerate_id() заменит текущий идентификатор сеанса новым и сохранит текущую информацию о сеансе. - Я попробую, просто посмотрим, что получится. 18.01.2012
  • Джош, ты сказал приложение php/Ajax. Вы действительно посещаете разные php-страницы или Ajax извлекает содержимое без загрузки страницы? Кроме того, рассматривается ли передача идентификатора сеанса через URL-адрес? 21.01.2012
  • Я действительно посещаю разные php-страницы, AJAX содержится на страницах. session_regenerate_id() это не исправило - он переименовывал идентификатор сеанса каждый раз, когда его вызывали, но все же данные сеанса из первого просмотра страницы не сохранялись. Это почти как если бы он читал из двух разных сессий. При первом просмотре страницы сеанс создается и работает один раз (на самом деле я могу использовать session_id() для получения идентификатора при первом просмотре страницы). Но затем при просмотре следующей страницы создается совершенно новый сеанс с другим идентификатором. Этот второй идентификатор используется на каждой странице с этого момента. 21.01.2012
  • вы действительно должны предоставить код сеанса 22.01.2012
  • Только что обновил вопрос, чтобы включить код сеанса 23.01.2012
  • Я понял, что проблема в том, что браузер распознает mydomain.com и www.mydomain.com как отдельные домены. Из-за этого он записывает два отдельных сеанса. Кто-нибудь знает решение, позволяющее рассматривать их как один домен без необходимости перенаправлять www.mydomain.com на mydomain.com или наоборот? 23.01.2012

Ответы:


1

Вы проверили, что перед вашим вызовом session_start() нет вывода? (Даже не пробел!).

Заголовки HTTP не могут быть отправлены после сброса любого вывода, что может привести к сбою попытки сообщить клиенту первоначальный файл cookie сеанса.

21.01.2012

2

Вы переключаетесь между http: и https: ? Иногда они рассматриваются как два отдельных домена, и между ними не может быть общего ключа.

21.01.2012
  • Две страницы, между которыми я переключаюсь, — это http://. Я переключаюсь на https://, когда попадаю на страницу оформления заказа, но сеанс теряется между двумя страницами http://. 23.01.2012

  • 3

    Оказывается, он распознавал mydomain.com и www.mydomain.com как отдельные сеансы и хранил 2 файла cookie с двумя разными PHPSESSID.

    Я добавил это в свой файл .htaccess, чтобы всегда перенаправлять mydomain.com/shop на www.mydomain.com/shop как для http, так и для https.

    RewriteEngine On
    
    #force http://www. to make sure SESSION data is always the same
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{REQUEST_URI} shop
    RewriteRule ^(.*)$ http://www.mydomain.com/shop/$1 [R,L]
    
    #force https://www. to make sure SESSION data is always the same
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{REQUEST_URI} shop
    RewriteRule ^(.*)$ https://www.mydomain.com/shop/$1 [R,L]
    
    24.01.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..