У меня есть сценарий, который устанавливает некоторые значения сессии прежде, чем перенаправить к /
использование header()
.
Я прочитал много сообщений о $_SESSION
переменная, уничтожаемая / потерянный после header()
, даже после того, как я реализовал это:
// set session here
session_regenerate_id(true);
session_write_close();
header("Location: /");
session_start()
установлен в корректных местах, кто-либо знает чего-нибудь, что я мог бы отсутствовать?
На index.php странице у меня есть это:
session_start();
print_r($_SESSION);
// outputs nothing :'(
Код довольно сложен, так не отправит все это, просто отрывки.
Чтобы закрыть этот вопрос, мы пришли к выводу, что это проблема с конфигурацией сервера, что неудивительно, учитывая, что хост хорошо известен для такого рода вещей.
Моя рекомендация:
Разрешить помечать свойства как индексируемые. Ограничение количества индексируемых свойств и столбцов на объект. Наличие большого жесткого ограничения на общие типы столбцов во всех объектах.
Реализовать индексы как отдельные таблицы (по одной на индекс), соединенные с основной таблицей данных (основная таблица имеет большой уникальный ключ для объекта). (При необходимости можно создать/удалить индексные таблицы).
Сериализуйте данные, включая столбцы индекса, а также поместите свойства индекса в реляционные столбцы первого класса в выделенных таблицах индекса. Используйте JSON вместо XML для экономии места в таблице. Применение политики кратких имен столбцов (или политики длинных отображаемых имен и коротких сохраненных имен) для экономии места и повышения производительности.
Используйте кварки для идентификаторов полей (но только в главном ядре для экономии оперативной памяти и ускорения некоторых операций чтения - не полагайтесь на сравнение кварковых указателей во всех случаях).
Моя мысль о ваших вариантах:
1 - это возможно. Очевидно, что производительность будет ниже, чем при отсутствии столбцов идентификаторов полей.
2 не является общим механизмом БД и не все рады изменениям динамической схемы. Но возможно да, если ваш механизм БД хорош в этом.
3 Возможно.
4 Да, хотя я бы использовал JSON.
5 Кажется 4 только менее оптимизирован??
6 Звучит хорошо; был бы с, если бы рад попробовать что-то новое, а также, если бы рад надежности и производительности, но обычно хотел бы пойти с более массовой технологии. Я также хотел бы уменьшить количество двигателей, участвующих в координации транзакции, до меньшего, чем было бы здесь.
Edit : Конечно, хотя я рекомендовал что-то, здесь не может быть общего правильного ответа - профилировать различные модели данных и подходы с вашими данными, чтобы увидеть, что работает лучше для вашего приложения.
Изменить: Изменить последнюю редактируемую формулировку.
-121--2224884- Если пустая дата
действительно вызывает ошибку, можно также создать более простую структуру времени
:
// more work is required to make this even close to production ready
class Time
{
// TODO: don't forget to add validation
public int Hours { get; set; }
public int Minutes { get; set; }
public int Seconds { get; set; }
public override string ToString()
{
return String.Format(
"{0:00}:{1:00}:{2:00}",
this.Hours, this.Minutes, this.Seconds);
}
}
Или, зачем беспокоиться: если вам не нужно делать вычисления с этой информацией, просто сохраните ее как Последовательности
.
Я никогда не видел никаких проблем, связанных с сеансом, из-за использования заголовков местоположения - Вы уверены, что вызываете session _ start на обеих страницах?
Hmm... этот ответ имел гораздо больший смысл, прежде чем вы добавили session_start бита выше, и упомянули тот факт, что вы были уверены, что используете session_start.:-)
Заголовок должен быть отправлен до закрытия сеанса
session_regenerate_id(true);
header("Location: /");
// the header must be sent before session close
session_write_close(); // here you could also use exit();