2011-08-15 38 views
5

我的應用程序中有一些基本的會話處理。在每個頁面中,我檢查用戶是否已登錄。如果他們已經被$_SESSION['user_id']識別,並且他們的登錄/註銷記錄在MySQL表中。如何獲取/設置session_id()還是應該自動生成?

我還想根據唯一的ID記錄訪客(未登錄)的訪問。 我曾經假設,一旦session_start()被稱爲內部session_id自動生成,並呼籲session_id()我可以檢索這個。但是這只是給出了一個「未定義的變量」錯誤,所以我想我必須手動設置它..?如果是這樣,那麼最好的方法是什麼,以便它是一個唯一的ID,或通常的方法是什麼?

感謝您的幫助......

回答

27

有2種方式來使用會話和會話ID在PHP:

1 - 自動生成會話ID,並得到它:

session_start(); 
$id = session_id(); 

2 - 手動設置會話ID,然後啓動它:

session_id('mySessionId'); 
session_start(); 

如果您打算設置會話ID,您必須在之前調用調用session_start(); 如果你打算生成一個隨機的session_id(或繼續在一個先前的頁面請求已經開始),然後得到該ID在別處使用,必須調用session_start()之前嘗試使用session_id()檢索會話ID。

+0

對不起,刪除了最後一條評論。我現在看到我的錯誤!感謝這個信息。 – grai

+0

不是問題:)很高興我能幫上忙 – Brian

1

在這裏你可以看到我的作品(會話啓動默默):http://sandbox.phpcode.eu/g/f6b6b.php

你忘了啓動會話,可能

+0

是的,我剛剛在測試頁上試了一下,它按照你的建議工作。但在我的應用程序中,我爲會話使用了一個類,並且只在構造函數中調用了session_start()一次。所以這個問題似乎只是在類方法中獲取/設置session_id(),但是在$ _SESSION數組中設置/獲取變量沒有問題。謝謝,但是我並不知道它開始默默無聞。 – grai

+0

@grainne:nonono,你沒有得到我。這是我的沙箱行爲 - 會話自動啓動,所以你不能在「show code」中看到它,你必須首先'session_start()',之後,你可以使用'session_id()' – genesis

+0

感謝您的解釋。我現在明白你的意思,第一次我以爲這只是一些粘貼的代碼。不知道當時發生了什麼事情:/我將不得不在稍後做一些適當的測試... – grai

0

嗯,可能是有點怪,但是當我需要唯一的ID我使用uniqid()

+0

不知道這個:)我想我會做什麼然後就是使用像$ _SESSION ['guest_id']與uniquid,因爲session_id()無論如何不起作用! – grai

相關問題