Решил я тут подзаняться писательством на PHP. CMS'ки мне не нужны - то, что я хочу должно быстро бегать и нет необходимости тянуть лишнее, но и писать с нуля не очень-то хочется. Таким образом, встала задача найти нормальный PHP-фреймворк, чтобы можно было быстро начать работать, чтобы был лёгкий и задокументированный. Почитал статьи на Хабре и нашёл там CodeIgniter. Почитал документацию (благо есть и на русском), понял, что всё понятно и решил начать писать. И тут нашла коса на камень: не работают сессии при их хранении в базе данных. Далее, рассказываю результаты расследования... И как бы никаких сообщений об ошибках. И записи в таблицу в базе данных добавляются, но почему-то при каждом обращении к сайту в таблице создаётся новая запись с другим номером сессии, а старая напрочь игнорируется! Прочитал ещё раз внимательно документацию, ещё раз проверил код - должно работать, но не работает! Ну что же, всё-таки хотя и не полноценный программист на PHP, но кое-что умею, полез в исходники библиотеки Session. Там выяснилось, что по какой-то причине возвращает облом функция sess_read(). В самой этой функции дошёл до места, где SQL-запрос к базе данных почему-то возвращает НОЛЬ строк! Пришлось лезть ещё и в исходники DB_active_rec.php. Там я наконец нашёл место, где генерируется сам SQL-запрос, попутно задавшись вопросом, почему не могли тупо предусмотреть функцию получение SQL-запроса без его выполнения? Итак, посмотрел я на запрос, после чего застыл в удивлении! Не знаю, какой светлой голове пришла в голову мысль выделить именно такое количество символов для поля user_agent в таблице ci_sessions. Но факт в том, что этого количества НЕ ХВАТАЛО! Поэтому значение User Agent сохранялось в базу данных в обрезанном виде, а когда приходило время проверять сессию, в SQL-запрос значение попадало в полном виде, после чего, разумеется, запись относящаяся к этой сессии просто не находилась! В итоге в таблице ci_session было увеличено поле user_agent и всё заработало! Не могу не постебаться над разработчиками. Это прикиньте какой сюрприз заложили программистам: берём один браузер, к которого User Agent короткий - работает, берём другой у которого длинный - не работает! Да тут чёкнешься искать почему и на длину User Agent подумаешь в последнюю очередь! Если кому помогло, всегда готов принять благодарности, ваш Виктор Вислобоков
|
|||