Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Странный глюк с сессиями

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: makast   (16.10.2010 в 19:43)   письмо автору
 
   для: aibolit   (13.10.2010 в 10:24)
 

del*

  Ответить  
 
 автор: LLLLLL   (15.10.2010 в 22:57)   письмо автору
 
   для: aibolit   (13.10.2010 в 15:22)
 

ты заметил-ты 7 раз обьяснил одно и тоже,распинался,умолял,а в итоге тебе написали,типа "код кривой"...и молчат.

  Ответить  
 
 автор: aibolit   (13.10.2010 в 17:09)   письмо автору
 
   для: sim5   (13.10.2010 в 15:23)
 

РЕШЕНО : смотрим заголовки отправляемые оперой и вычисляем что их меняет, у меня антривить, конкретнее avast. Осталось разобраться что именнов в нем меняет заголовок браузера, и почему только оперы.

благодарю Sim5 что направил в нужное русло

  Ответить  
 
 автор: sim5   (13.10.2010 в 15:23)   письмо автору
 
   для: aibolit   (13.10.2010 в 15:08)
 

Объяснение только одно - теряется сессия. Надо заголовки проанализировать.

  Ответить  
 
 автор: aibolit   (13.10.2010 в 15:22)   письмо автору
 
   для: sim5   (13.10.2010 в 14:55)
 

если смотреть переменные $_SERVER, $GLOBAL, то они всегда идентичные SID в них тот что нужно, а вот если сторонним по смотреть то пока не могу ибо на работе, и тут ниче подобного нет

  Ответить  
 
 автор: aibolit   (13.10.2010 в 15:08)   письмо автору
 
   для: sim5   (13.10.2010 в 14:55)
 

попробовал твой код - тоже дергает второй SID и тоже только опера. и заглянув в temp также второй sess_* создается

в принципе я у себя решил проблему, слелал куками, и генерю ей SID скриптом, вот просто интересно что дергает и меняет SID, и почему только опера.

  Ответить  
 
 автор: sim5   (13.10.2010 в 14:55)   письмо автору
 
   для: aibolit   (13.10.2010 в 13:35)
 

Вот это, с выброшенным второстепенным, во всех браузерах, включая и Опера конечно, работает без добавления лишней сессии.
<?
session_start
();
$id_session session_id();
$ses mysql_query("SELECT * FROM session WHERE id_session = '$id_session'");
if(
mysql_num_rows($ses)) echo "Yes<br>"
else 
mysql_query("INSERT INTO session VALUES('$id_session')"); 
$ath mysql_query("SELECT * FROM session");
if(
mysql_num_rows($ath)) { 
  while(
$author mysql_fetch_assoc($ath)) echo $author['id_session'] . "<br>"
}

Если запись новой, значит прерывается старая и создается новая, которую можно проверить, заглянув в temp каталог. Проверьте заголовки браузера, чего он у вас отсылает.

  Ответить  
 
 автор: aibolit   (13.10.2010 в 13:35)   письмо автору
 
   для: sim5   (13.10.2010 в 13:03)
 

ну вот скрипт который тут выложен в разделе примеры:


<?PHP
  
// Начинаем сессию

  
session_start();
  include 
"config.php";
  
// Получаем уникальный id сессии

  
echo $id_session session_id();

  
// Устанавливаем соединение с базой данных



  // Проверяем, присутствует ли такой id в базе данных

  
$query "SELECT * FROM session

            WHERE id_session = '
$id_session'";

  
$ses mysql_query($query);

  if(!
$ses) exit("<p>Ошибка в запросе к таблице сессий</p>");

  
// Если сессия с таким номером уже существует,

  // значит пользователь online - обновляем время его

  // последнего посещения

  
if(mysql_num_rows($ses)>0)

  {

    
$query "UPDATE session SET putdate = NOW(),

                                 user = '
$_SESSION[user]'

              WHERE id_session = '
$id_session'";

    
mysql_query($query);

  }

  
// Иначе, если такого номера нет - посетитель только что

  // вошёл - помещаем в таблицу нового посетителя

  
else

  {

    
$query "INSERT INTO session

              VALUES('
$id_session', NOW(), '$_SESSION[user]')";

    if(!
mysql_query($query))

    {

      echo 
$query."<br>";

      echo 
"<p>Ошибка при добавлении пользователя</p>";

      exit();

    }

  }

  
// Будем считать, что пользователи, которые отсутствовали

  // в течении 20 минут - покинули ресурс - удаляем их

  // id_session из базы данных

  
$query "DELETE FROM session

            WHERE putdate < NOW() -  INTERVAL '20' MINUTE"
;

  
mysql_query($query);

 
// Устанавливаем соединение с базой данных

  
include "config.php";

  
// Выводим имена всех посетителей, записи о которых имеются

  // в таблице session

  
$query "SELECT * FROM session";

  
$ath mysql_query($query);

  if(!
$ath) exit("<p>Ошибка в запросе к таблице сессий</p>");

  
// Если хоть кто-то есть - выводим таблицу

  
if(mysql_num_rows($ath)>0)

  {

    echo 
"<table>";

    while(
$author mysql_fetch_array($ath))

    {

      
// Если посетитель не зарегистрирован

      // выводим вместо его имени - "аноним"

      
if(empty($author['user'])) echo "<tr><td>аноним</td></tr>";

      else echo 
"<tr><td>".$author['user']."</td></tr>";

    }

    echo 
"</table>";

  }
?>


по коду ни второго вызова сессии ни второго вызова inserta нет.

а вот в логе mysql есть


Time                 Id Command    Argument
101013 13:15:41          1 Connect     root@localhost on
              1 Init DB     upbaseru
              1 Query       SELECT VERSION()
              1 Query       SET NAMES 'cp1251'
             
/*первый раз смотрит сессию в бд */
          1 Query       SELECT * FROM session

            WHERE id_session = '55fd38c5c8b788b23969df7eb8e0a13f'
    /*и добавляет запись если таковой нет */          
           1 Query       INSERT INTO session

              VALUES('55fd38c5c8b788b23969df7eb8e0a13f', NOW(), '')
              1 Query       DELETE FROM session

            WHERE putdate < NOW() -  INTERVAL '20' MINUTE
              1 Init DB     upbaseru
              1 Query       SELECT VERSION()
              1 Query       SET NAMES 'cp1251'
              1 Query       SELECT * FROM session
              1 Quit
              2 Connect     root@localhost on
              2 Init DB     upbaseru
              2 Query       SELECT VERSION()
              2 Query       SET NAMES 'cp1251'

/* ворой раз смотрит сессию НО УЖЕ С ДРУГИМ ID хотя по коду скрипта ид неменяется */
              2 Query       SELECT * FROM session
            WHERE id_session = 'e5680d18fe94d4067cf22eecfbd04e3f'
/* и добавляет его ХОТЯ второго инсерта в скрипте тоже нет */
              2 Query       INSERT INTO session

              VALUES('e5680d18fe94d4067cf22eecfbd04e3f', NOW(), '')
              2 Query       DELETE FROM session

            WHERE putdate < NOW() -  INTERVAL '20' MINUTE
              2 Init DB     upbaseru
              2 Query       SELECT VERSION()
              2 Query       SET NAMES 'cp1251'
              2 Query       SELECT * FROM session
              2 Quit


откуда берется этот второй SID и второй интсерт

а вот лог если листать страницы IE


101013 13:30:22         29 Connect     root@localhost on 
             29 Init DB     upbaseru
             29 Query       SELECT VERSION()
             29 Query       SET NAMES 'cp1251'
             29 Query       SELECT * FROM session

            WHERE id_session = '97d94e98600f10597a28ff8d1063c5c7'
             29 Query       UPDATE session SET putdate = NOW(),

                                 user = 'ololo'

              WHERE id_session = '97d94e98600f10597a28ff8d1063c5c7'
             29 Query       DELETE FROM session

            WHERE putdate < NOW() -  INTERVAL '20' MINUTE
             29 Init DB     upbaseru
             29 Query       SELECT VERSION()
             29 Query       SET NAMES 'cp1251'
             29 Query       SELECT * FROM session
             29 Quit       
101013 13:49:02         30 Connect     root@localhost on 
             30 Init DB     upbaseru
             30 Query       SELECT VERSION()
             30 Query       SET NAMES 'cp1251'
             30 Query       SELECT * FROM session

            WHERE id_session = '97d94e98600f10597a28ff8d1063c5c7'
             30 Query       UPDATE session SET putdate = NOW(),

                                 user = 'ololo'

              WHERE id_session = '97d94e98600f10597a28ff8d1063c5c7'
             30 Query       DELETE FROM session

            WHERE putdate < NOW() -  INTERVAL '20' MINUTE
             30 Init DB     upbaseru
             30 Query       SELECT VERSION()
             30 Query       SET NAMES 'cp1251'
             30 Query       SELECT * FROM session 


и в нем id не меняется и соответственно второго инсерта нет

  Ответить  
 
 автор: sim5   (13.10.2010 в 13:03)   письмо автору
 
   для: aibolit   (13.10.2010 в 12:27)
 

По своей инициативе сессия создаваться не может, значит надо искать причину.

  Ответить  
 
 автор: aibolit   (13.10.2010 в 12:27)   письмо автору
 
   для: sim5   (13.10.2010 в 12:14)
 

такой же глюк у меня в simpla, ls, webassyst в дефолтных версиях, без каких либо изменений в скриптах, с тем отличием что в них нет хранения сессий в БД но вотрой файл sess_* тоже создается. так что это не только мой скрипт

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования