如何删除PHP会话?

use*_*653 6 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;

?>
Run Code Online (Sandbox Code Playgroud)

zal*_*lew 5

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

对于你的问题,从手册:

session_destroy()销毁与当前会话关联的所有数据.它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie.要再次使用会话变量,必须调用session_start().

为了完全终止会话,比如要将用户注销,还必须取消设置会话ID.如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie.setcookie()可能会用于此.


str*_*ger 0

大规模的保存和销毁是怎么回事?只需session_start设置您的变量即可。无需销毁,然后重置它们!

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