2014-10-26 3 views
0

Мы используем сервер, на котором есть несколько сервисов. Поэтому, чтобы убедиться, что сеансы php не смешиваются, мы хотим использовать разные файлы cookie для каждой службы. Мы создали функцию под названием sec_session_start, где мы определяем файл cookie (mySession) для этой услуги. Затем мы сделали вторую функцию под названием start_my_session для подключения к куки-файлу службы.PHP - session_id не указывает правильное имя сеанса

Каждый раз, когда мы пытаемся использовать start_my_session, он получает информацию внутри PHPSESSID вместо mySession. Как я могу это исправить.

Следующая функция вызывается только в одном месте (когда пользователь входит в систему).

function sec_session_start() { 
    $secure = false; 
    $httponly = true; 
    // Forces sessions to only use cookies. 
    if (ini_set('session.use_only_cookies', 1) === FALSE) { 
     header("Location: ../error.php?err=Could not initiate the safe session (ini_set)"); 
     exit(); 
    } 
    $cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 

    session_name('mySession'); 
    session_start();  // Start the PHP session. 

    echo session_id();  // USE AT THE MOMENT FOR DEBUGGING ONLY 
} 

Идентификатор сеанса, возвращаемый последней инструкцией, является идентификатором, соответствующим файлу mySession. (Я проверил в папку сервера/TMP и внутри отладчика ресурсов Chrome.)

Следующая функция вызывается внутри everyother защищенной страницы, когда пользователь вошел в систему.

function start_my_session() { 
    echo session_name('mySession').'<br>'; // DEBUG : display PHPSESSID 
    echo session_name().'<br>';    // DEBUG : display mySession 
    session_start();  // Start the mySession 

    echo session_id();    // DEBUG : display the PHPSESSID session id 
} 

Как упоминается в комментарии, то session_id по-прежнему указывает на PHPSESSID вместо mySession.

Любые советы о том, что мы делаем неправильно и как мы можем это исправить?

ответ

1

Это может показаться не очень логично, и вы будете думать, что я сумасшедший, но: (! И да, это означает, что она также до начала сессии)

Перед включением названия сеанса с session_name(...) ... run a session_write_close();

+0

Пробовал и работает. Но почему? Закрывает ли он сессию по умолчанию PHP и освобождает место для нового сеанса, который я пытаюсь сделать? –

+0

Я честно не уверен. Насколько я вижу, сеанса вообще не закрывать. Кажется, что-то ошибка в логике PHP. – rjdown

+0

звучит хорошо. Благодарю вас за время. Я бил головой об этом в течение 20 часов (через несколько дней). –