2012-04-28 69 views
1

我在PHP中遇到过这个问题,我从未能够理解!
我有一个PHP文件下面的代码:为什么`session_destroy()`在PHP中不起作用?

session_start(); 
$sid = session_id(); 
session_unset(); 
session_destroy(); 
echo $sid; 

按道理每次它应该给我不同的会话ID导致时间很明显,我称之为session_destroy(),但它只是不会终止会话。它总是给我相同的会话ID!
我做错了吗?

+0

嗯,只要你得到一个新的_session_,那么相同的ID就可以。据我记得,你应该。 – 2012-04-28 07:02:45

+0

@JoachimIsaksson嗯,我需要它是不同的,因为我正在实现一个应用程序,基于他们的会话ID对用户进行身份验证,我必须完全控制这些事情。 – 2012-04-28 07:06:57

+0

@Radu,嗯......这是个主意。 – 2012-04-28 07:15:27

回答

4

对我来说,只有下列组合完美的作品,以完全摧毁一个会话:

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; 
?> 

它的工作的:你试试这个。

+0

这里也没什么区别! – 2012-04-28 07:04:56

+0

添加示例代码。你试过这个吗?它完美的作品。 – 2012-04-28 07:10:22

+0

是的,这是完美的作品。谢谢。 – 2012-04-28 07:16:00

2

seesion_id() concept

请参阅此链接。 它说如果指定了id,它会替换当前的会话ID。 session_id()需要在session_start()之前调用

中有这样的例子指出,

自PHP 4.3.3你得到一个通知,当你两次启动一个会话。您可以使用session_id()来检测会话是否已经启动。在创建脚本之前,必须知道session_id()在没有会话标识已知时返回false。所以现在我们可以让一个脚本女巫检测一个会话是否开始,如果不是,它会开始一个会话。

This is what you get then: 
<?php 
if(!session_id()){ 
session_start(); 
} 
?> 
相关问题