Как мне сбросить мой идентификатор сессии? - PullRequest
2 голосов
/ 26 декабря 2011

Я пытаюсь уничтожить сеанс после успешной оплаты.

 $session_id = session_id();

    $sql = "
        UPDATE
            tbl_seat_book
        SET
            final_book = 'Y'
        WHERE
            session_id = '$session_id'
    ";
    $r = $this->db->executeQuery($sql);

        session_unset();
        session_destroy();

    echo 'Booking successfull';

Но когда я бронирую билеты, появляется тот же session_id. Как я могу уничтожить session_id после успешной оплаты.

РЕДАКТИРОВАТЬ:

$sql = "
        INSERT INTO
            tbl_seat_book
        SET
            booking_date = '$_REQUEST[bus_date]',
            booking_time = '$_REQUEST[bus_time]',
            bus_id = '$_REQUEST[bus_id]',
            route_id = '$_REQUEST[route_id]',
            session_id = '$session_id',
            session_start_time = '$time',
            temp_book = 'Y',
            final_book = 'N',
            $cond
    ";
    $booked = $this->db->insertQuery($sql);

EDIT2:

function book_final_tickets()
{

    $session_id = session_id();
    $sql = "
        UPDATE
            tbl_seat_book
        SET
            final_book = 'Y'
        WHERE
            session_id = '$session_id'
    ";


    //session_unset();

    if($r = $this->db->executeQuery($sql)){
        if(session_destroy()){
            unset($session_id); 
            echo 'Booking successfull';
        }
    }
}

Ответы [ 5 ]

4 голосов
/ 26 декабря 2011

Используйте session_regenerate_id(true) для создания нового идентификатора сеанса и удаления старого.Обратите внимание, что при этом вся информация будет храниться в $_SESSION как часть нового идентификатора сеанса.

например, Чтобы получить новый идентификатор сеанса, но сохранить информацию о сеансе в $_SESSION.

// Regenerate session ID, user gets a new sid, and cookie is updated.
session_regenerate_id(true);

// Make sure you pick up the new session ID
$session_id = session_id();

// Note, $_SESSION will be the same here as before, but $session_id will be diff.
// Old session info has been moved to new session.

Если вы также не хотите хранить информацию в $_SESSION, то вы хотите использовать session_destroy() для уничтожения информации о сеансе на стороне сервера и setcookie() чтобы вручную сбросить куки с идентификатором сессии на стороне клиента.Затем вы можете начать новый сеанс и сгенерировать новый идентификатор сеанса, как и раньше.

например, Чтобы получить новый идентификатор сеанса И удалить всю информацию о сеансе.

session_unset();   // Remove the $_SESSION variable information.
session_destroy(); // Remove the server-side session information.

// Unset the cookie on the client-side.
setcookie("PHPSESSID", "", 1); // Force the cookie to expire.

// Start a new session
session_start();

// Generate a new session ID
session_regenerate_id(true);

// Then finally, make sure you pick up the new session ID
$session_id = session_id();

// $_SESSION will now be empty, and $session_id will have been regenerated.
// You have a completely empty, new session.

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


session_destroy() само по себе не удалит cookie-файл на стороне клиента, поэтому при следующем посещении пользователя у него все равно будет установлен тот же идентификатор сеанса (но его информация о сеансе на стороне сервера)будет уничтожен).

Из документов (выделено мной):

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

2 голосов
/ 26 декабря 2011

Вы просто замените session_unset () на session_destroy ()

$session_id = session_id();

$sql = "
    UPDATE
        tbl_seat_book
    SET
        final_book = 'Y'
    WHERE
        session_id = '$session_id'
";
if($this->db->executeQuery($sql))
{
    session_destroy();
    echo 'Booking successfull';
}
1 голос
/ 26 декабря 2011
if(isset($_SESSION['req_value']))
{
    unset($_SESSION['req_value']);   
}
1 голос
/ 26 декабря 2011

попробуйте с этим:

session_unset(); //destroys variables
session_destroy(); //destroys session
1 голос
/ 26 декабря 2011

session_unset ();только освободите зарегистрированную переменную, если вы хотите уничтожить весь сеанс, используйте session_destroy();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...