2014-04-01 74 views
0

這是我的問題。如何註銷特定用戶會話(php和mysql)

我正在研究食品管理系統。

現在我有它當前有人登錄時,它將他們的信息放入登錄表。

然後,使用該信息,當用戶註銷時,它將它們帶出表格。

雖然多人登錄時我遇到了麻煩。

檢查此場景。

有人登錄。他們被帶到他們的儀表板,並根據食物表,食物列表和電子郵件列來查看他們的食物列表,指定誰擁有該特定物品。

現在,如果它們註銷,它會將它們從登錄表中取出。

但是,如果第一個用戶仍然登錄,並且第二個用戶登錄,那麼問題就會出現。

如果第二個用戶在第一個用戶之前先註銷,他的數據將被刪除。但是,如果第一個用戶在第二個用戶之前註銷,則第二個用戶的數據仍將從表中刪除。如果第二個用戶刷新,他將顯示第一個用戶信息。

它與我認爲的會話有關,當用戶登錄時,它會轉到儀表板並啓動會話。我設置它的方式是,當會話啓動時,它從最新用戶電子郵件的登錄表中提取。這就是這個問題。當2 ppl登錄時,用戶電子郵件變量現在引用最近的用戶,所以當第一個用戶註銷時,最近的用戶將被註銷。

有沒有一種方法可以創建獨特的會話,或者在用戶登錄時存儲用戶的電子郵件/用戶名,所以我可以在他們註銷時引用特定用戶的電子郵件。

以下是啓動會話和查找最近用戶的代碼。

<?php require_once('Connections/localhost.php'); 

$index = 0; 
?> 

<?php 
//initialize the session 
if (!isset($_SESSION)) { 

    mysql_select_db($database_localhost, $localhost); 
    $log = mysql_query("SELECT email FROM loggedin") or die(mysql_error()); 
    while($cols = mysql_fetch_array($log)){ 
     $value = $cols['email']; 
     $email[$index] = $value; 
     $index++; 
    } 

session_start(); 

然後,我在查詢中引用$ value變量。

因此,每次有人登錄時,都會運行此代碼,然後將$ value設置爲最近的電子郵件,或者更確切地說,查詢電子郵件數組末尾的電子郵件。因此,當用戶1註銷它時,然後在查詢中使用$值,但$ value現在設置爲下一個用戶的電子郵件。我需要它,以便它保持爲登錄的用戶電子郵件。

+0

除非你在做一些奇怪的事情,否則會話_should_對用戶來說是唯一的。與其試圖從頭開始編寫此代碼,您可能希望找到一個您喜歡的框架,它將提供執行此類操作的代碼。 – Kryten

+0

這個問題似乎對Stack Overflow來說過於寬泛,這是針對有明確答案的編碼的具體問題。高級別設計概念和最佳實踐的討論更適合於http://programmers.stackexchange.com。請閱讀[此meta post](http://meta.stackexchange.com/a/82990/228805)瞭解更多信息。如果您有特定的編碼問題,則需要提供更多信息。請閱讀此[關於如何提出良好問題的建議](http://stackoverflow.com/help/how-to-ask)。 –

+0

我在代碼中添加了一些更具體的內容。 – user3486712

回答

0

通常,您將使用會話變量來記住當前登錄的用戶ID的ID。 EG

$_SESSION['userId']=$validatedUserId; 

$ validatedUserId的id當且僅當它通過密碼檢查,否則它應該爲空;

然後返回帖子可以參考布爾

(null!=$_SESSION['userId']) 

你可以轉到這個代碼,如果沒有空的用戶登錄。 當用戶註銷時,問題:

$_SESSION['userId']=null; session_destroy(); 

後,用戶需要登錄可以使用$ _SESSION [「用戶id」]之前一次。

+0

謝謝你。 此外,當我測試時,我在同一個瀏覽器實例上登錄了兩個帳戶,會在記憶會話id時造成麻煩嗎? – user3486712

+0

包含userId的$ _SESSION數組將在特定瀏覽器的選項卡和窗口之間共享,但IE,chrome,firefox中的每一個都將具有單獨的SESSION ID,因此數組可以具有不同的值。完全像在不同機器上的兩次會話。 – doctorbobapplications