Почему я не могу сохранить экземпляр класса PHP как Переменную сеанса

В вашем URL есть несколько ошибок, но только одна, в частности, в том, как вы их создали. Орган должен быть без каких-либо сегментов пути, к ним следует добавить путь добавления, потому что / будет закодирован, и вы получите следующий URL: https: //api.themoviedb.org%2F3%2Fmovies%2F/ 157336 / videos? Api_key = ###

Так что просто разделите эту часть на следующее:

.authority("api.themoviedb.org")
.appendPath("3")
.appendPath("movies")

Тогда есть некоторые особенности с tmdb, во-первых, вы можете только вызвать их API через https, поэтому установите это как схему:

builder.scheme("https")

Затем вы пытаетесь достичь неопределенной конечной точки, если вы посмотрите документацию в https://developers.themoviedb.org / 3 / movies / get-movie-videos вы заметите, что в настоящее время вы пытаетесь достичь

/ movies / {id} / videos

blockquote>

но конечная точка находится по адресу:

/ movie / {id} / videos

blockquote>

Поэтому измените:

.appendPath("movies")

с помощью .appendPath ( "movie")

теперь, если вы выйдете из своей переменной myUrl, вы должны увидеть следующий URL:

http s: //api.themoviedb.org/3/movie/157336/videos? api_key = ###

blockquote>

, что является правильным.

5
задан 2 March 2009 в 18:54
поделиться

5 ответов

Вы, возможно, должны сериализировать объект/переменную $st перед хранением его. Это гарантирует, что все сохраняется к сессии. Это - определенно способ пойти для объектно-ориентированного кода. Когда Вы хотите использовать данные снова, необходимо не сериализировать их.

1
ответ дан 18 December 2019 в 12:02
поделиться

Необходимо включать определение класса перед вызовом session_start(), иначе объект не будет десериализован правильно и будет экземпляром __PHP_Incomplete_Class. Иначе то, что Вы имеете, должно хорошо работать.

13
ответ дан 18 December 2019 в 12:02
поделиться

Если Вы собираетесь хранить объект на сессии, это должен быть текст ссылки. Существует МНОГО проблем с сериализацией объектов в PHP, уже не говоря о хранении их на сессии. Я рекомендую против выполнения этого в целом и нахождения другого решения для Вашей проблемы. Если Вы собираетесь сделать это, хотя, необходимо изучить 'волшебные методы' текст ссылки, который необходимо определить в классе для упрощения, это - переинстанцирование, когда это называют от сессии.

0
ответ дан 18 December 2019 в 12:02
поделиться

Это - одна из тех вещей, которые это твердо отладить в изоляции. Хранить инстанцированные объекты на Сессиях PHP всегда немного хитро, и не 100% гарантировал, что работал. Вот некоторые общие подсказки по отладке, которые могут помочь Вам понять это.

Во-первых, проверьте свой апачский журнал ошибок. Вы обращались к "методу необъектная ошибка"? Если так, это означает, что Вы не вытаскиваете объект назад из сессии. В противном случае существует ли ошибка, которая указала, что Ваш вызов метода перестал работать по другой причине?

Во-вторых, проверьте для наблюдения то, что Вы действительно выходите из своей сессии.

if($comd =="getstate") {
    $st= $_SESSION['statefile'];
    //get the class of st
    phplog("instance=".get_class($st));

    //get a reflection dump of st
    $ref = new ReflectionClass($st);
    $string = $ref->__toString();       
    phplog("reflection=".$string);
}   

В-третьих, посмотрите на сериализированное строковое значение, которое хранится на самой сессии. Вы на самом деле храните сериализованный объект? В Вашей dev среде, устанавливает сессия save_path ini, оценивают в php.ini чему-то как/tmp, (или используйте ini_set метод, чтобы сделать то же самое):

session.save_path = "/tmp"

и затем исследуйте файлы, созданные в/tmp (или безотносительно папки). Необходимо видеть строку, которая запускается с:

statefile:O:..........

Название класса, который инстанцировал объекта, будет также включено там, а также значения, сохраненные к свойствам.

1
ответ дан 18 December 2019 в 12:02
поделиться

Вы имеете session.auto_start включенный? Страница сессии руководства указывает, что, если Вы делаете, необходимо загрузить определение класса по-другому:

При включении сессии auto_start затем, единственный способ поместить объекты в сессии состоит в том, чтобы загрузить свое определение класса с помощью auto_prepend_file, в котором Вы еще загружаете определение класса, необходимо будет сериализировать объект и не сериализировать его впоследствии.

http://php.net/manual/en/intro.session.php

Как та страница говорит, сериализация/несериализация объекта будет обычно делаться автоматически PHP, но наличием session.auto_start включенный изменит это.

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

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