Ayola.net
Новости: В связи с обилием спама, постинг на форуме временно закрыт.

Для связи с поддержкой используйте тикеты в панели управления.
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Июнь 26, 2017, 10:35:08


Войти


Страниц: [1]
  Печать  
Автор Тема: Странная проблема с сессиями.  (Прочитано 7214 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« : Сентябрь 06, 2007, 21:41:25 »

Проблема в том, что сбрасываются переменные сессии. Создал простой тест - в одном файле переменная устанавливается переменная, в другом она выводится. Все работает прекрасно.
Но при выводе страницы сайта переменные пропадают.
Выглядит действительно очень глупо. Я даже представить не могу, в чем может быть проблема.

Приблизительно опишу механизм работы сайта:
В файле .htaccess прописано:
RewriteEngine on
RewriteRule .* index.php

В файле index.php происходит обработка поступившего URL и вывод нужной страницы.
Все картинки и css подгружаются из папки с выключенным RewriteEngine.

На сайте есть форма авторизации. Если логин/пароль введены правильно, то устанавливается переменная сессии. При следующем запросе она проверяется. Так вот, если в самом начале скрипта при наличии этой переменной останавливать выполнение, то она остается. Если вывести страницу, то при следующем запросе к серверу переменной уже нет.
Логично предположить, что она удаляется где-то в коде вывода страницы. Но это не так. И в денвере, и на другом хостинге код работал.  Может у хостинга есть какие-то особенности, которые я не учел?
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #1 : Сентябрь 07, 2007, 02:21:00 »

Нет, никаких особенностей нет. Есть только ошибки программирования.
Всё что касается работы сессий - всё установлено в дефолтные значения php.

Раз работают все CMS и форумы, а ваш скрипт не работает, приходит на ум мысль что где-то вы делаете не совсем корректно.
Помочь будет проще, если мы будем видеть конкретный скрипт.
Иными словами - урл в студию.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #2 : Сентябрь 07, 2007, 06:40:10 »

Сайт http://skaz.md8.ru/
Все запросы сначала получает index.php, он подгружает _application/init.php. Тот в свою очередь подгружает  _application/includes/controller.php. Он обрабатывает урл и подгружает следующий файл.
Файлы админки лежат по адресу _application/includes/admin/. Каждый из них подключает функцию checkAdmin (_application/functions/checkAdmin.php) и в зависимости от результата либо выводит страницу, либо ошибку 404. Так вот, если остановить скрипт еще в функции checkAdmin, то переменная никуда не девается. А если позволить скрипту вывести страницу, то при следующем запросе переменная пропадает, и выводится ошибка 404.
Но ни в одном из файлов админки эта переменная не удаляется! Вернее в одном удаляется - в файе выхода, но он подключается только файлом _application/includes/controller.php при нужном урле.
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #3 : Сентябрь 07, 2007, 06:53:31 »

Ага. Уже понятнее.
Теперь по пунктам.
1. Закомментируйте вызовы session_destroy() во всех файлах.
2. А ваш браузер, чисто случайно, не блокирует файлы cookies? Например из-за настроек безопасности если речь идёт об IE.
3. Перед созданием сессии установите все нужные значения для сессии через ini_set. В том числе - работу через cookies.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #4 : Сентябрь 07, 2007, 06:56:20 »

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

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #5 : Сентябрь 07, 2007, 18:01:03 »

session_destroy у меня нет вообще, т.к. сделан счетчик посетителей по сессии. Только в одном месте удаляется переменная сессии (на всякий случай закомментировал).
Перед стартом сессии добавил:
Код:
ini_set("session.use_cookies", "1");
ini_set("session.cookie_lifetime", "1");
# На всякий случай
ini_set("session.gc_probability", "0");
Куки не блокируются, на всякий случай попробовал в разных браузерах.
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #6 : Сентябрь 07, 2007, 18:59:31 »

ini_set("session.cookie_lifetime", "1");

Насколько я понимаю - вот и ответ - время жизни этой сессии благодаря cookie - 1 секунда.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #7 : Сентябрь 07, 2007, 19:30:58 »

Ошибся чуть чуть... Но я ее только сейчас добавил, без этого все равно не работало.
Исправил "1" на "0"
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #8 : Сентябрь 07, 2007, 23:37:04 »

0 - это работа без cookies. Т.е. сессия живёт только до тех пор, пока не будет закрыто окно браузера. После этого сессия автоматически уничтожается.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #9 : Сентябрь 08, 2007, 01:23:22 »

Ну это то понятно, но я же не закрываю окно браузера.
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #10 : Сентябрь 08, 2007, 05:10:36 »

Такс. Сейчас я накидаю простейший скриптик, и мы с вами всё увидим.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #11 : Сентябрь 08, 2007, 08:25:02 »

http://alpha.cwx.ru/session.php - вот в этом скрипте мы устанавливаем сессию. Число выводящееся на экран сохраняется в сессии.

http://alpha.cwx.ru/session_test.php - вот тут мы эту сессию просто читаем. Как я вижу, сессия отлично сохраняется.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #12 : Сентябрь 14, 2007, 21:52:52 »

Проблема решена.
Видимо на хостинге включен register_globals, хотя в FAQ написано, что он выключен.
Для проверки создал два файла.
Вот первый файл (устанавливается переменная сессии):
Код:
<?php

session_start
();
$_SESSION["var"] = "value";

?>
И вот второй файл (выводится переменная сессии):
Код:
<?php
session_start
();
header("Content-type: text/plain; charset=utf-8");
echo (
"Зачение переменной сессии var - \"" $_SESSION["var"] . "\"\n");
$var "otherValue";
echo (
"На этот раз зачение переменной сессии var - \"" $_SESSION["var"] . "\"");
?>
Второй файл выводит:
Цитировать
Зачение переменной сессии var - "value"
На этот раз зачение переменной сессии var - "otherValue"
Можно ли выключить register_globals для моего аккаунта?
« Последнее редактирование: Сентябрь 14, 2007, 22:03:50 от Tardos Mors » Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #13 : Сентябрь 14, 2007, 22:03:58 »

Да, register_globals включен по многочисленным просьбам пользователей.
И вы первый (!) кто просит его выключить.
Выключили его для вас.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Tardos Mors
Новичёк
*

Карма: 0
Сообщений: 7


Просмотр профиля
« Ответ #14 : Сентябрь 15, 2007, 00:47:24 »

Спасибо.
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #15 : Сентябрь 15, 2007, 02:21:20 »

Всегда рады помочь.

Топик закрываю.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006, Simple Machines LLC

2003-2008 © ООО "Инфотур" - Бесплатный хостинг Ayola.net
Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Страница сгенерирована за 0.075 секунд. Запросов: 17.