За последние 24 часа нас посетили 38853 программиста и 1811 роботов. Сейчас ищет 1601 программист ...

помогите разобраться с сессиями

Тема в разделе "PHP для новичков", создана пользователем Alex_@, 29 окт 2009.

  1. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Здравствуйте!

    проблема в следующем:

    при первичном посещении сайта пользователем в базу данных (table un_users - не зарегестрированные пользователи) заноситься о нём как о незарегестрированном пользователе, также в БД я заношу идентификатор сессии!

    после того как пользователь заполнил форму авторизации с правильным login и pass, при этом меняется идентификатор сессии!


    подскажите почему так происходит!!!!



    вот функция которая всё это делает:


    PHP:
    1.  
    2.  
    3. //$ArrP - массив с переданными параметрами
    4. //$setting - для поключения к БД
    5. //$sis_id - идентификатор сесси
    6.  
    7. function f_User($ArrP, $setting, $sid_id)
    8. {
    9.  
    10.     global $Users;
    11.  
    12.     $conn = new MySQLConnect($setting);
    13.  
    14.     $conn->getSelect();
    15.  
    16.     $ip = $_SERVER['REMOTE_ADDR'];
    17.  
    18.     $time_enter = date("Y-m-d H:i:s");
    19.  
    20.     if ($ArrP[users][error] == true) {
    21.  
    22.         //проверяем может пользователь уже зарегестрированн
    23.  
    24.         $strSQL = 'SELECT * FROM `user` WHERE `ses_id` = "' . $sid_id . '" LIMIT 1';
    25.  
    26.         $ArrUsers = $conn->QueryComplex($strSQL);
    27.  
    28.         if (count($ArrUsers) == 0) {
    29.  
    30.             $new_ip = ip2long($ip);
    31.  
    32.             $strSQL = 'SELECT * FROM `unknow_user` WHERE `ip` = "' . $new_ip . '" LIMIT 1';
    33.  
    34.             $ArrUnknowUsers = $conn->QueryComplex($strSQL);
    35.  
    36.             if (count($ArrUnknowUsers) != 0) {
    37.  
    38.                 $new_hit = $ArrUnknowUsers[0][hit] + 1;
    39.  
    40.                 $strSQL = 'UPDATE `unknow_user` SET `ip` = "' . $new_ip . '", `hit` = "' . $new_hit .
    41.                     '",`time_e` = "' . $time_enter . '", `online` = 1';
    42.  
    43.             } else {
    44.  
    45.                 $strSQL = 'INSERT INTO `unknow_user` (`count`,`sid`,`ip`, `hit`,`time_e`,`online`,`status`) VALUES (NULL , "' .
    46.                     $sid_id . '", "' . $new_ip . '", 1, "' . $time_enter . '", 1, 1)';
    47.  
    48.             }
    49.  
    50.             $conn->getQuery($strSQL);
    51.  
    52.             $Users[boot][ses_id] = $sid_id;
    53.  
    54.             $Users[boot][acsses] = 10;
    55.  
    56.             $Users[error] = true;
    57.  
    58.         } else {
    59.  
    60.             foreach ($ArrUsers[0] as $key => $value) {
    61.  
    62.                 if ($key == "ses_id") {
    63.  
    64.                     $Users[boot][$key] = $sid_id;
    65.  
    66.                 } else {
    67.  
    68.                     $Users[boot][$key] = $value;
    69.  
    70.                 }
    71.  
    72.             }
    73.  
    74.             $strSQL = 'UPDATE `user` SET `ip` = "' . $new_ip . '", `time_e` = "' . $time_enter .
    75.                 '", `online` = 1';
    76.  
    77.             $conn->getQuery($strSQL);
    78.  
    79.         }
    80.  
    81.     } else {
    82.  
    83.         $login = $ArrP[users][login];
    84.         $password = $ArrP[users][password];
    85.  
    86.         $strSQL = 'SELECT * FROM `user` WHERE `login` = "' . $login .
    87.             '" AND  `pass` = "' . $password . '" LIMIT 1';
    88.  
    89.         $ArrUsers = $conn->QueryComplex($strSQL);
    90.  
    91.         if ($ArrUsers == false) {
    92.  
    93.             $new_ip = ip2long($ip);
    94.  
    95.             $strSQL = 'SELECT * FROM `unknow_user` WHERE `ip` = "' . $new_ip . '" LIMIT 1';
    96.  
    97.             $ArrUnknowUsers = $conn->QueryComplex($strSQL);
    98.  
    99.             if ($ArrUnknowUsers != false) {
    100.  
    101.                 $new_hit = $ArrUnknowUsers[0][hit] + 1;
    102.  
    103.                 $strSQL = 'UPDATE `unknow_user` SET `ip` = "' . $new_ip . '", `hit` = "' . $new_hit .
    104.                     '",`time_e` = "' . $time_enter . '", `online` = 1';
    105.  
    106.             } else {
    107.  
    108.                 $strSQL = 'INSERT INTO `unknow_user` (`count`,`sid`,`ip`, `hit`,`time_e`,`online`,`status`) VALUES (NULL , "' .
    109.                     $sid_id . '", "' . $new_ip . '", 1, "' . $time_enter . '", 1, 1)';
    110.  
    111.             }
    112.  
    113.             $conn->getQuery($strSQL);
    114.  
    115.             $Users[boot][ses_id] = $sid_id;
    116.  
    117.             $Users[boot][acsses] = 10;
    118.  
    119.             $Users[error] = true;
    120.  
    121.         } else {
    122.  
    123.             foreach ($ArrUsers[0] as $key => $value) {
    124.  
    125.                 if ($key == "ses_id") {
    126.  
    127.                     $Users[boot][$key] = $sid_id;
    128.  
    129.                 } else {
    130.  
    131.                     $Users[boot][$key] = $value;
    132.  
    133.                 }
    134.  
    135.             }
    136.  
    137.             $strSQL = 'UPDATE `user` SET `ses_id` = "' . $sid_id . '", `time_e` = "' . $time_enter .
    138.                 '", `online` = 1';
    139.  
    140.             $conn->getQuery($strSQL);
    141.  
    142.  
    143.             }
    144.  
    145.         }
    146.  
    147.         unset($ArrP[users][login]);
    148.         unset($ArrP[users][password]);
    149.     }
    150.  
    151.  
    152.     return $Users;
    153.  
    154.     $conn->close();
    155.  
    156. }
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А сколько времени живет сессия?

    И сколько времени проходит с момента первого посещения и сменой идентификатора сессии?
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Новая сессия - новый идентификатор.
    Время жизни сессии - до 15 минут.
     
  4. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Проходит 1-2 минуты!!!
    идентификатор сессии после передачи формы совсем другой
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ты уверен?


    session_regenerate_id() нигде не используется в коде?
     
  6. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    У меня когда заходишь на сайт происходит инициализация сессии, я узнаю её id и заношу в базу этого пользователя как не зарегестрированного, при этом проходит меньше минуты!

    после этого я заполняю форму авторизации, после её передачи идентификатор меняется!!!!

    нет!
    для получениния идентификатора сессии использую
    PHP:
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не должен :)

    Попробуй при первом запуске скрипта сохранить что-то в сессию.
    А после авторизации прочитать сохраненное.

    Что оно тебе выдаст?
     
  8. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Я ничего не сохранял в сессии, но сейчас прождал более 20 минут, после авторизации, всё прошло нормально, то-есть идентификатор сессии не поменялся!

    при этом в течении этих 20 минут я просто обновлял страницу, всё нормально, всё остаётся без изменений, т.е. session_id не поменялся!

    я не знаю что у меня такое было:)

    я уже провелил свой php.ini правда ничего не менял, время жизни сессии у меня стоит 15 минут


    сейчас всё работает нормально!

    у меня только вопрос возник при обнавлении страницы идентификатор сессии не меняется, а время жизни сессии меняется или нет????????
     
  9. Timm

    Timm Активный пользователь

    С нами с:
    30 окт 2009
    Сообщения:
    1
    Симпатии:
    0
    Посмотри на action формы - куда отправляет

    Если ты в зашел на сайт по адресу www.домен.ru, а форма отправляет на домен.ru или наоборот - ид сессии смнится, (т. е. для другого домена назначится новый ид, а для старого так и останется).