星期日, 2月 25, 2007

Session 的使用

Session 一直是網站設計裡面很重要的一個重點,有時候是因為資料不能放在使用者端的 Cookie,怕被使用者修改,另外一種原因是資料根本就不能給使用者知道。

像是 PHP 提供的 Session 的基本運作原理是透過 Cookie 設定一串十六進位的數字給 PHPSESSID,然後在 /tmp 下放對應的 sess_[PHPSESSID] 檔案,檔案裡就放 Session Variable。

舉個例子來說,User Login 後我們會通常會這樣寫:

// 假設前面已經確認身份了
session_start();
$_SESSION['user'] = $username; // 設定 $username 到 Session 裡

然後在其他檔案這樣檢查:

session_start();
if (isset($_SESSION['user'])) {
// 如果有 user 這個變數的話 blah blah...
}

對於小規模的 Web server 這樣做相當完美,因為使用者的 PHPSESSID 只是一個亂數對應到 /tmp 下的某個真正存放 Session 的檔案,使用者沒有辦法隨便亂改。同時使用者也沒有辦法猜出其他的人使用的 PHPSESSID。(當然這裡的前提是 PHP 的 Sessoion 模組寫的夠好,不會讓人用其他方法「猜」出來)

但當網站不斷的成長後,就會遭遇到一個問題:假設我有兩台 PHP server,這兩台存放 PHP Session 資料的 /tmp 當然是分開的。如果使用者在 web1 登入後,下一個連線是到 web2 上面,在 web2 上的 PHP 就沒辦法認出使用者登入過了。

這些問題留在下一篇提出一些解法。

沒有留言: