如何删除PHP会话?

时间:2009-04-17 02:41:55

标签: php session

当用户退出时,我可能无法正确删除PHP会话。我注意到,如果我退出并在不关闭浏览器的情况下重新登录,则会话ID不会更改,但如果我退出,请关闭浏览器窗口,打开一个新窗口并登录,会话ID将不同。我需要做一些不同的事情,还是这种正常行为?我已经使用相同的过程三年,但最近发生的事情让我觉得也许我需要做一些与众不同的事情。

以下是当有人点击退出时我基本上做的事情。

<?php

session_start();

if( isSet($_SESSION['FacID']) )
    $facID = $_SESSION['FacID'];    //Want to re-instate this after we destroy the session.

unset($_SESSION);
session_destroy();

if( isSet($_SESSION['FacID']) )
    $_SESSION['FacID'] = $facID;

?>

3 个答案:

答案 0 :(得分:5)

如果您觉得需要强制使用新ID http://pl.php.net/manual/en/function.session-regenerate-id.php

关于你的问题,请参阅手册:

  

session_destroy()会破坏所有的   与当前相关的数据   会话。它没有取消任何一个   与...相关的全局变量   会话,或取消设置会话cookie。   要再次使用会话变量,   必须调用session_start()。

     

为了杀死会话   总而言之,喜欢将用户注销,   会话ID也必须取消设置。如果   一个cookie用于传播   会话ID(默认行为),然后   必须删除会话cookie。   setcookie()可以用于此。

答案 1 :(得分:1)

你的会话被破坏了。

如果浏览器没有指定会话ID,PHP将只生成会话ID。只要会议被破坏,就没有问题。

答案 2 :(得分:0)

什么是大规模的拯救和破坏?只需session_start并设置您的变量。无需销毁,然后重置它们!

浏览器的“问题”是当您关闭浏览器窗口时,浏览器正在删除PHP发送的cookie,因此它知道会话ID。这是一个浏览器选项,无法在服务器端更改(除非您利用)。可以使用某些方法规避它,但这可能不是您的最佳选择。