данные сеанса не записываются в базу данных - PullRequest
2 голосов
/ 25 июня 2010

Сайт, который я обновляю, записывает данные сеанса в свою базу данных с помощью функции session_set_save_handler следующим образом:

session_set_save_handler (array(&$ses_class, '_open'), 
                          array(&$ses_class, '_close'), 
                          array(&$ses_class, '_read'), 
                          array(&$ses_class, '_write'), 
                          array(&$ses_class, '_destroy'), 
                          array(&$ses_class, '_gc'));

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

Кроме того, в зависимости от страницы, на которой я нахожусь, функция _write может или не может записывать в базу данных, возвращая «Отказано в доступе ...» (используя пароль: НЕТ) 'mysql_error.

Я в растерянности.Любые хорошие ресурсы, на которые я должен смотреть?

Ответы [ 3 ]

1 голос
/ 25 июня 2010

Вы определенно звоните session_start() после session_set_save_handler?

'Доступ запрещен ... (используется пароль: НЕТ)' mysql_error.

Это обычно означает, что база данных не была подключена, поэтому PHP пытается подключиться с именем пользователя по умолчанию и без пароля, что в 99,999% случаев не работает Например. mysql_query() вызывается раньше mysql_connect()

Похоже, проблемы с упорядочением кода.

0 голосов
/ 25 июня 2010

Мой вопрос состоял из двух частей, и этот ответ соответствует второй части, проблеме невозможности записи в базу данных.

Не сохранен объект сеанса, который использует сайт, над которым я работаюресурс базы данных и, следовательно, соединения с базой данных, сделанные вниз по потоку в коде, засоряли соединение сеанса.Я создал переменную объекта для хранения ресурса базы данных и явно сослался на него во всех запросах сеанса, т.е.

$result = mysql_query($query)

стал

$result = mysql_query($query, $this -> db);

, и теперь я могу записать вбаза данных просто отлично.

0 голосов
/ 25 июня 2010

В PHP 5.1 была ошибка, из-за которой объекты уничтожались до закрытия сессии.Мое решение состояло в том, чтобы создать функцию деструктора для моего объекта БД, который явно закрывал сеанс.

Другая проблема заключается в том, что у вас может быть код, запускающий сеанс до инициализации соединения с базой данных.Это требует тщательного отслеживания ваших включений в поисках глобального кода, неожиданно вызывающего $_SESSION.Это также сыграет хоп с вашим session_set_save_handler() вызовом.У меня была эта проблема на предыдущей работе.Единственным решением было изменить порядок инициализации, чтобы они не происходили в неправильном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...