2009-04-17 114 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