session_id() ошибка

Хотя я не настолько конкретен в отношении session_id(),

я использую код в php, как это

в a.php я использую этот код

$_SESSION['sid']=session_id();

когда я в b.phpя повторяю sid сеанса и затем сбрасываю его, как это..

echo $_SESSION['sid'];
unset($_SESSION['sid']);

который отображает d5tk0123nmj56

снова, когда я посещаю.php, а затем b.php, я снова получаю тот же результат d5tk0123nmj56

шуднт второй сеанс sid будет другим??? потому что я уже отключил сеанс в b.php..

EDIT:

я проверяю это в localhost

ANOTHER EDIT

чтобы объяснить все описательно, .. я использую систему корзины, в которой сначала я проверяю, вошел ли пользователь по его электронному идентификатору, следовательно, $_session['logged_user']=user_email - это одна сессия.. я использую $_session['sid']=session_id() как уникальный сеанс для идентификации транзакции для корзины, после того как пользователь выписывает (платит), что он может снова купить что-то со своим статусом, вошедшим в систему, тогда я должен снова проверить, не является ли он вошел в систему (таким образом, logged_user должен существовать), и для следующей транзакции я хочу назначить ему другое значение для $_SESSION['sid']= новый session_id();

как я знаю (может быть, я ошибаюсь) session_destroy() убивает весь пользовательский сеанс, и это также уничтожит сеанс $_SESSION['logged_user']..

5 ответов

Я думаю, что вы хотите уничтожить сессию. Пытаться

session_destroy(); 

Чтобы восстановить идентификатор сессии Попробуйте:

session_regenerate_id(true);

Вы не убили сеанс таким образом, вы просто сбросили переменную с идентификатором сессии. Если вы сделали:

$unsetMe = session_id();
unset($unsetMe);

вы просто сбросили бы переменную, ничего не было бы сделано для сеанса. Вам необходимо использовать:

session_destroy();

Это потому, что у пользователя все еще есть тот же сеанс, ни в коем случае вы не заканчиваете его с точки зрения пользователя. Вы просто удаляете некоторые данные сеанса на стороне сервера.

Идентификатор сеанса отправляется на сервер с помощью файла cookie (по умолчанию он называется PHPSESSID). В b.php вы отменяете данные сеанса на стороне сервера, но в следующий раз пользователь посещает a.php они будут отправлять тот же файл cookie и начинать сеанс с тем же идентификатором, что и раньше.

  • Чтобы сбросить данные сеанса на стороне сервера, вы должны использовать session_destroy(), (Это не изменит идентификатор сеанса или не удалит файл cookie на стороне клиента)
  • Чтобы сгенерировать новый идентификатор сессии, вы можете использовать session_regenerate_id(true), (Это перезапишет файл cookie на стороне клиента новым идентификатором сеанса. Он не уничтожит информацию на стороне сервера, связанную с сеансом)

Чтобы полностью завершить сеанс пользователя, вам необходимо уничтожить как информацию на стороне сервера, так и cookie на стороне клиента, и сгенерировать новый идентификатор сеанса. Вот быстрый пример,

<?php
    session_start();    
    $_SESSION['blah'] = true;

    var_dump(session_id()); // q4ufhl29bg63jbhr8nsjp665b1
    var_dump($_SESSION);    // blah = true

    session_unset();
    session_destroy();
    setcookie("PHPSESSID", "", 1); // See note below
    session_start();
    session_regenerate_id(true);

    var_dump(session_id()); // gigtleqddo84l8cm15qe4il3q3
    var_dump($_SESSION);    // (empty)
?>

В заголовках будет показан идентификатор сеанса, изменяющийся на стороне клиента:

Заголовок запроса
Cookie:PHPSESSID=q4ufhl29bg63jbhr8nsjp665b1

Заголовок ответа
Set-Cookie:PHPSESSID= удален; истекает = понедельник, 27 декабря 2010 16:47:57 GMT
PHPSESSID = gigtleqddo84l8cm15qe4il3q3; Путь = /

(Вы можете уйти без setcookie() позвоните сюда, так как вы все равно создаете новый сеанс, поэтому cookie будет перезаписываться новым идентификатором, но хорошей практикой является явное уничтожение старого cookie).

Чтобы сгенерировать новый идентификатор сеанса и сохранить его вместо старого идентификатора:

$_SESSION['sid']=session_regenerate_id(true);

Вы отключили сервер-глобал-вар $_SESSION['sid'], а не реальный идентификатор сессии

использование session_destroy(); "сбросить" session_id

PHP: session_destroy () Руководство

Другие вопросы по тегам