Php 会话\u销毁未取消设置会话\u id

Php 会话\u销毁未取消设置会话\u id,php,session,sessionid,Php,Session,Sessionid,我正在开发一个在线订票系统,在成功预订(付款后)后,我想清除会话id。但问题是我无法清除它,尽管我使用了session\u destroy()来销毁会话 注意:我已经回显了会话id以检查其是否重置 网址: 试试这个: unset($session_id); session_destroy(); 在会话开始之前调用会话id,并手动设置会话id 示例1:将使用相同的会话id <?php session_start(); echo session_id(); //4ef975b277b52

我正在开发一个在线订票系统,在成功预订(付款后)后,我想清除会话id。但问题是我无法清除它,尽管我使用了
session\u destroy()
来销毁会话

注意:我已经回显了会话id以检查其是否重置

网址:

试试这个:

unset($session_id);
session_destroy();

会话开始之前调用
会话id
,并手动设置
会话id

示例1:将使用相同的会话id

<?php
session_start();

echo session_id(); //4ef975b277b52

session_destroy();

session_start();

echo session_id();  //4ef975b277b52
?>
(A) !=(B) ,因此您可以手动设置会话id,有关详细信息,请参阅

另一个解决方案,不要使用会话id(),只需创建新的会话数组:

<?php
$_SESSION['booked'] = false;

if($r = $this->db->executeQuery($sql))
{
    $_SESSION['booked'] = true;
    echo 'Booking successfull';
}
?>

session\u destroy()
本身不会删除客户端cookie,因此用户下次访问时,仍然会设置相同的会话id(但其服务器端会话信息将被销毁)

从文档(我的重点):

会话_destroy()销毁与当前会话关联的所有数据 一场它不会取消设置与关联的任何全局变量 会话,或取消设置会话cookie。。。为了杀死敌人 与注销用户一样,会话id也必须 未设置。如果使用cookie传播会话id(默认值 行为),则必须删除会话cookie

您可以使用生成新会话ID并删除旧会话ID。请注意,这将保留
$\u SESSION
中的所有信息作为新会话ID的一部分,因此如果要清除会话信息并重新开始,仍然需要使用
SESSION\u destroy

e、 g


标题将显示客户端上正在更改的会话ID:

请求头
Cookie:PHPSESSID=q4ufhl29bg63jbhr8nsjp665b1

响应标题
设置Cookie:PHPSESSID=deleted;expires=周一,2010年12月27日16:47:57格林尼治标准时间
PHPSESSID=gigtleqddo84l8cm15qe4il3q3;路径=/

(您可以不在此处调用
setcookie()
,因为您正在创建一个新会话,所以cookie将被新ID覆盖,但最好是显式销毁旧cookie)。

而不是

session_destroy()

我宁愿只做一件事

会话\u重新生成\u id(true)


在使用session_destroy()销毁会话后,您将获得一个新会话\u id

,这对我很有用:

setcookie('PHPSESSID','',time()-3600',/')


我的关键是将路径设置为“/”。这是真正破坏饼干的唯一方法

您的查询已执行,echo语句已打印?是的……但我想在成功预订车票后销毁会话。如果您的echo语句已打印,则您的会话应已销毁。正在尝试调试出现这种情况的原因。虽然已销毁(成功预订后),但回音显示相同的会话id。请尝试使用
session\u unset()
。另外,在
session\u destroy()
之前尝试调用
session\u start()
。我认为$session\u id不是问题所在。。。这太明显了。我认为保存会话id的cookie在会话_destroy()之后仍然存在;使用
session_ID(uniqid())手动设置会话ID是个坏主意
uniqid()
不是很随机,因为它是基于时间戳的。使用
session\u regenerate\u id()
让PHP自动生成
session\u id
要好得多,因为这样可以使用更好的熵源(例如
ini\u集('session.entropy\u file','/dev/uradom');
)。丰富的
session regenerate\u id()
也有自己的问题,甚至不鼓励使用它。但是,仍然可以使用
session\u id(session\u create\u id())
让PHP完成它的工作,至少对于id生成部分是这样。(不幸的是,要解决可靠性问题,还有很多事情要做。请参阅文档页。)谢谢!!这对我来说是最好的答案。。。祝贺你:)
<?php
session_id(uniqid()); 
session_start();

echo session_id(); //4ef975d3d52f5  (A)

session_destroy();


session_id(uniqid());
session_start();

echo session_id();  //4ef975d3b3399 (B)
?>
<?php
$_SESSION['booked'] = false;

if($r = $this->db->executeQuery($sql))
{
    $_SESSION['booked'] = true;
    echo 'Booking successfull';
}
?>
<?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)
?>