为什么“session_destroy()”在PHP中不起作用?

为什么“session_destroy()”在PHP中不起作用?,php,session,sessionid,Php,Session,Sessionid,我在PHP会话中遇到了这个问题,我一直无法理解 我在PHP文件中有以下代码: session_start(); $sid = session_id(); session_unset(); session_destroy(); echo $sid; 从逻辑上讲,每次它都应该给我不同的会话ID,因为显然我调用了session\u destroy(),但它不会终止会话。它总是给我相同的会话ID 我做错了吗?对我来说,只有以下组合才能完全摧毁会话: session_destroy(); session

我在PHP会话中遇到了这个问题,我一直无法理解
我在PHP文件中有以下代码:

session_start();
$sid = session_id();
session_unset();
session_destroy();
echo $sid;
从逻辑上讲,每次它都应该给我不同的会话ID,因为显然我调用了
session\u destroy()
,但它不会终止会话。它总是给我相同的会话ID

我做错了吗?

对我来说,只有以下组合才能完全摧毁会话:

session_destroy();
session_unset();
session_regenerate_id(true);
编辑:您是否尝试过以下操作:

<?php
session_start();
$sid = session_id();
echo $sid;
echo "<br />";

//destroy session
session_destroy();
session_unset();

//now start the new session
session_start();
session_regenerate_id(true);
$sid = session_id();
echo $sid;
?>


它工作得很好。

对我来说,只有以下组合才能完美地摧毁会话:

session_destroy();
session_unset();
session_regenerate_id(true);
编辑:您是否尝试过以下操作:

<?php
session_start();
$sid = session_id();
echo $sid;
echo "<br />";

//destroy session
session_destroy();
session_unset();

//now start the new session
session_start();
session_regenerate_id(true);
$sid = session_id();
echo $sid;
?>

它工作得很好。

请参阅此链接。 它说如果指定了id,它将替换当前会话id。为此,需要在会话启动()之前调用会话id()

在这种情况下,有一个例子是

从PHP4.3.3开始,当您启动一个会话两次时,会收到一个通知。您可以使用session_id()检测会话是否已启动。在创建脚本之前,您必须知道,当会话id未知时,session_id()返回false。因此,现在我们可以创建一个脚本witch detect,如果会话已启动,如果未启动,则启动会话

This is what you get then:
<?php
if(!session_id()){
 session_start();
}
?>
这就是您得到的:

请参阅此链接。 它说如果指定了id,它将替换当前会话id。为此,需要在会话启动()之前调用会话id()

在这种情况下,有一个例子是

从PHP4.3.3开始,当您启动一个会话两次时,会收到一个通知。您可以使用session_id()检测会话是否已启动。在创建脚本之前,您必须知道,当会话id未知时,session_id()返回false。因此,现在我们可以创建一个脚本witch detect,如果会话已启动,如果未启动,则启动会话

This is what you get then:
<?php
if(!session_id()){
 session_start();
}
?>
这就是您得到的:

好吧,只要你有一个新的会话,相同的ID就可以了。就我所记得的,你应该。@JoachimIsaksson好吧,我需要它是不同的,因为我正在实现一个应用程序,它根据用户的会话ID对用户进行身份验证,我必须完全控制这些事情。@Radu,Hmmmm。。。这是个好主意。好吧,只要你有一个新的会话,相同的ID就可以了。就我所记得的,你应该。@JoachimIsaksson好吧,我需要它是不同的,因为我正在实现一个应用程序,它根据用户的会话ID对用户进行身份验证,我必须完全控制这些事情。@Radu,Hmmmm。。。这是一个想法。另一个用户的答案是调用unset($\u SESSION),Walking Man问为什么调用它不好:$\u SESSION是一个超全局变量,由PHP本身设置和填充。您可以使用它来设置和取消设置特殊变量,但如果使用unset($\u SESSION)破坏整个数组,则在调用$\u SESSION=array()之前,您无法再将变量保存到会话中。当$\u会话不是数组时,无法保存会话。因此,不建议在不直接调用$\u SESSION=array()的情况下调用unset($\u SESSION)。另一个用户的回答是调用unset($\u SESSION),Walking Man问为什么不调用它:$\u SESSION是一个由PHP本身设置和填充的超全局变量。您可以使用它来设置和取消设置特殊变量,但如果使用unset($\u SESSION)破坏整个数组,则在调用$\u SESSION=array()之前,您无法再将变量保存到会话中。当$\u会话不是数组时,无法保存会话。因此,不建议在不直接调用$\u SESSION=array()的情况下调用unset($\u SESSION)。