2009-04-17 211 views
6

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

下面是当有人点击登出我基本上做到。

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

?> 

回答

0

什么是大规模的保存和摧毁?只需session_start并设置你的变量。无需摧毁,然后重置它们!

贵“的问题”与浏览器是,当你关闭浏览器窗口,您的浏览器中删除该PHP发送它,所以它知道会话ID的Cookie。这是一个浏览器选项,不能在服务器端进行更改(除非您利用)。它可以用一些方法规避,但这可能不是你最好的选择。

5

如果你觉得有必要迫使一个新的ID http://pl.php.net/manual/en/function.session-regenerate-id.php

而对于你的问题,从手动:

session_destroy()销毁所有与当前 会话相关的 数据。它不去掉任何与 会话,或者取消会话cookie相关的 全局变量。 要再次使用会话变量,必须调用 session_start()。

为了完全消除会话 ,就像登录用户一样, 会话ID也必须取消设置。如果 一个cookie被用于传播 会话ID(默认行为),那么 会话cookie必须删除。 setcookie()可用于此。

1

你的会话被破坏掉了。

如果浏览器没有指定一个,PHP将只生成一个会话ID。只要会议遭到破坏,就不会有任何问题。

+0

因此,为多个用户使用相同会话ID(如果浏览器未关闭)的事实确实不是问题? – user39653 2009-04-17 14:10:30