我试图在他成功付款后销毁会话。
$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';
}
}
}
答案 0 :(得分:4)
使用session_regenerate_id(true)
生成新会话ID并删除旧会话ID。请注意,这会将$_SESSION
中的所有信息保留为新会话ID的一部分。
e.g。 获取新的会话ID,但将会话信息保存在$_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()
手动取消设置会话客户端的ID cookie。然后,您可以像以前一样开始新会话并生成新的会话ID。
e.g。 获取新的session_id并删除所有会话信息。
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会被新的ID覆盖,但是明确销毁这个cookie是个好习惯。旧饼干。
session_destroy()
不会删除客户端cookie,因此下次用户访问时,他们仍然会设置相同的会话ID(但他们的服务器端会话信息将被销毁)
从文档(强调我的):
session_destroy()会销毁与当前关联的所有数据 会话。它不会取消任何与之相关的全局变量 会话,或取消设置会话cookie。 ......为了杀人 完全会话,喜欢将用户注销,会话ID也必须 没有设置。如果使用cookie来传播会话ID(默认值) 行为),然后必须删除会话cookie。
答案 1 :(得分:2)
你只需用session_destroy()
替换session_unset()$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';
}
答案 2 :(得分:1)
session_unset();只释放您已注册的变量,如果要销毁所有会话,请使用session_destroy();
答案 3 :(得分:1)
试试这个:
session_unset(); //destroys variables
session_destroy(); //destroys session
答案 4 :(得分:1)
if(isset($_SESSION['req_value']))
{
unset($_SESSION['req_value']);
}