2010-08-30 62 views
2

我有一個項目,我想在一個瀏覽器中創建兩個會話cookie。第一場會議是爲了唯一識別一個人,第二場會議是在會議之間分享用戶之間的事件。我一直在使用這個數據庫,但希望數據在會話消失時消失。系統中沒有登錄。使用PHP的一個實例中的多個會話?

有沒有辦法做到這一點,除了創建一個cookie系統來複制功能?

例如,我們將有兩個會話Cookie:

name=someRandomUUIDsession=valueSharedBetweenUsers.

我不想分享name會話與多個用戶,但session會議將是。思考?

+1

當然。我認爲這是我見過的最奇怪的問題。問你的自己一個問題,**當你的共享會話應該死亡?** – 2010-08-30 16:55:04

+0

糾正我,如果我錯了,但你基本上想要共享會話,對嗎?您希望能夠設置$ _SESSION ['shared'] ='somevalue',並讓您的用戶共享這些內容?如果是這樣,那不是一個真正的會話,你可能必須爲此建立自己的cookie系統。 – 2010-08-30 16:56:10

+0

@Col。彈片:當會議中的evey用戶不再使用會話時。 - --------- @Ryan Kinal是的,我想要一個共享會話,但我也想要一個私人會話。共享會話將完成您通常期望數據庫執行的操作(這不是一個專業的項目,它可能會影響可能的操作,看到我們可以做什麼),我不希望$ _SESSION處於正常狀態感覺,我希望能夠爲一個客戶端管理多個$ _SESSIONS。 – Incognito 2010-08-30 17:04:18

回答

3

如果您想共享用戶之間的信息,使用會話並不是最好的主意,因爲它使用文件系統。你最好使用處理所有鎖定,併發等問題的數據庫。

雖然你要求的技術上可能,但我強烈建議不要這樣做。

編輯

假設我理解正確的您的要求,這裏是我會怎麼做:

  1. 使用會話只涉及到用戶存儲會話數據。它可能包括像:

    $_SESSION['name'] = 'test name'; 
    $_SESSION['groupid'] = 2; 
    
  2. 一個MySQL數據庫和表的字段groupidXXXXX(數據要存儲),timestamp

每當有人爲特定的組ID更新信息,你更新時間戳。

然後運行一個簡單的cronjob檢查是否有任何current time - timestamp > 3600(一個小時),您可以認爲這是過時的並刪除這些記錄。

+0

您能否擴展文件系統的使用情況? – Incognito 2010-08-30 16:59:35

+2

@user:如果兩個用戶在同一時間點擊該網站,則兩個進程都可能在同一時間寫入共享會話。如果發生這種情況,至少一個用戶的更改將被忽略,最壞的情況下會話文件將被損壞。 – cHao 2010-08-30 17:01:57

+0

我想避免使用數據庫作爲解決方案,我已經這樣做了。我完全同意這是一種更好的方式,這不是會話的目的,但這只是嘗試一些不同的方法:多個會話管理,功能類似於$ _SESSION,只允許多個會話。 – Incognito 2010-08-30 18:04:15

1

「valueSharedBetweenUsers」來自哪裏?它是一個常量或數據庫條目?

無論哪種方式,每組創建一個會話都沒有意義。你應該給每個用戶一個獨特的會話,每個用戶;與你的「共享」屬性作爲每個人的會話屬性。

因此,開始的唯一的會話,然後就去做<? $_SESSION['session'] = 'mySharedValue'; ?>

現在,每個人都有一個獨特的會話ID和共同價值「會話」的會話。

(顯然,如果你需要在以後修改這個屬性你必須爲每個authed單獨分開做)

+0

例如,該值可以是將相同單詞輸入到輸入中的用戶,並且可以開始一個名爲「apples」的會話,其中兩個用戶都可以「print_r($ _ SESSION)」並將數據發佈到數組中。用戶還可以單獨控制他們在哪些會話中,作爲爲什麼需要私人會話的例子。 – Incognito 2010-08-30 17:11:14

0

這不是一樣牽強,因爲人們正在Facebook和Twitter至少有10個不同的會話正在當用戶登錄時創建。