переменная сеанса, не передающая значения в php [duplicate]

Предположим, у вас есть большой проект, написанный на c ++, который содержит тысячу файлов .cpp и тысячу файлов .h. И давайте предположим, что проект также зависит от десяти статических библиотек. Скажем, мы работаем над Windows, и мы строим наш проект в Visual Studio 20xx. Когда вы нажимаете Ctrl + F7 Visual Studio, чтобы начать компиляцию всего решения (предположим, что у нас есть только один проект в решении)

В чем смысл компиляции?

  • Visual Studio выполните поиск в файле .vcxproj и начните компилировать каждый файл с расширением .cpp. Порядок компиляции не определен. Поэтому вы не должны предполагать, что файл main.cpp скомпилирован сначала
  • . Если файлы .cpp зависят от дополнительных файлов .h, чтобы найти символы, которые могут или не могут быть определены в файл .cpp
  • Если существует один .cpp-файл, в котором компилятор не смог найти один символ, ошибка времени компилятора вызывает сообщение Символ x не может быть найден
  • Для каждого файла с расширением .cpp создается объектный файл .o, а также Visual Studio записывает вывод в файл с именем ProjectName.Cpp.Clean.txt , который содержит все объектные файлы, которые должны обрабатывается компоновщиком.

Второй этап компиляции выполняется Linker.Linker должен объединить весь объектный файл и построить окончательно вывод (который может быть исполняемым или библиотекой)

Шаги при связывании проекта

  • Разберите все объектные файлы и найдите определение, которое было объявлено только в заголовках (например: Код одного метода класса, как указано в p повторные ответы или событие инициализация статической переменной, которая является членом внутри класса)
  • Если один символ не может быть найден в объектных файлах, он также выполняется в дополнительных библиотеках. Для добавления новой библиотеки в project Свойства конфигурации -> Каталоги VC ++ -> Библиотечные каталоги, и здесь вы указали дополнительную папку для поиска библиотек и Свойства конфигурации -> Linker -> Input для указания имени библиотеки. -Если линкер не смог найти символ, который вы пишете в одном .cpp, он вызывает ошибку времени компоновщика, которая может звучать как error LNK2001: unresolved external symbol "void __cdecl foo(void)" (?foo@@YAXXZ)

Наблюдение

  1. После того, как Linker найдет один символ, он не ищет в других библиотеках для него
  2. Порядок ссылок на библиотеки имеет значение.
  3. Если Linker находит внешний символ в одной статической библиотеке, он включает в себя символ на выходе проекта. Однако, если библиотека является общей (динамической), он не включает в себя код (символы) на выходе, но Run-Time могут возникнуть сбои

Как решить эту ошибку

Ошибка времени компилятора:

  • Убедитесь, что вы правильно выполнили синтаксический проект c ++.

Ошибка времени компоновщика

  • Определите все символы, которые вы объявляете в ваших файлах заголовков.
  • Используйте #pragma once, чтобы компилятор не включал один заголовок если он уже был включен в текущий .cpp, который скомпилирован
  • Убедитесь, что ваш exter nal library не содержит символов, которые могут вступать в конфликт с другими символами, которые вы определили в ваших файлах заголовков.
  • Когда вы используете шаблон, чтобы убедиться, что вы включаете определение каждой функции шаблона в файл заголовка для разрешения компилятор для создания соответствующего кода для любых экземпляров.
10
задан Arihant 30 October 2013 в 21:28
поделиться

8 ответов

Я также столкнулся с той же проблемой, я сделал следующие шаги для решения проблемы

  1. Я редактировал файл /etc/php.ini и искал путь session.save_path = "/ var / lib / php / session "вы должны предоставить свою информацию о сеансе

2 После этого просто изменилось разрешение, приведенное ниже * chown root.apache / var / lib / php / session * Это все , Эти шаги устраняют мою проблему

0
ответ дан Aman Shukla 27 August 2018 в 00:15
поделиться

Возможно, если ваш путь сеанса работает неправильно, вы можете попробовать session.save_path(path/to/any folder); как альтернативный путь. Если он работает, вы можете спросить своего хостинг-провайдера о проблеме с пути по умолчанию.

3
ответ дан Andrey Moiseev 27 August 2018 в 00:15
поделиться

Просто поговорил с услугой хостинга, это была проблема в их конце. он сказал: «Ваша учетная запись session.save_path не была установлена, поскольку возникла проблема. Я установил ее для вас сейчас».

И после этого она работает отлично:)

1
ответ дан Arihant 27 August 2018 в 00:15
поделиться

Если вы используете скрипт подключения, не забудьте использовать session_start(); в соединении тоже, некоторые проблемы перед тем, как заметить эту проблему.

23
ответ дан Community 27 August 2018 в 00:15
поделиться

Сегодня я столкнулся с этой проблемой. проблема связана с $ config ['base_url']. Я заметил htpp: //www.domain.com и http://example.com . для исправления всегда устанавливайте base_url на http://www.example.com

0
ответ дан Devqxz 27 August 2018 в 00:15
поделиться

Другая важная причина, по которой сеансы не могут работать, воспроизводится с настройками cookie сеанса, например. время жизни cookie сеанса до 0 или других низких значений из-за простой ошибки или другого разработчика по какой-либо причине.

session_set_cookie_params(0)
1
ответ дан Jacek Dziurdzikowski 27 August 2018 в 00:15
поделиться

У меня была аналогичная проблема и с доменом cookie:

    ini_set('session.cookie_domain', '.domain.com');

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

0
ответ дан talsibony 27 August 2018 в 00:15
поделиться

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

По-видимому, ваш session_save_path (), для меня это было / var / lib / php5 /, должны иметь правильные разрешения (пользователь, на котором запущен php, например, www-data нуждается в доступе на запись в каталог). Я случайно изменил его, полностью разбив сессии.

Запустите sudo chmod -R 700 /var/lib/php5/, а затем sudo chown -R www-data /var/lib/php5/, чтобы пользователь php имел доступ к папке.

8
ответ дан Vadman 27 August 2018 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: