2011-05-21 47 views
0

我有PHP應用程序,其中包含三個小應用程序。每個應用程序都有自己的用戶,它們對所有系統都是唯一的我遇到會話管理問題。當一個用戶登錄server.com/app1並寫入server.com/app2第二個應用程序自動登錄該用戶。但此用戶對此應用程序沒有任何權利。在登錄頁面,我這樣做:會話管理問題

$status = $user->status; 

if($status != 4) { 
     $auth_key = session_encrypt($userdata, $passdata); 

     $SQL = "UPDATE customer SET auth_key = '$auth_key' 
       WHERE username = '$userdata' "; 

     $auth_query = mysql_db_query($db, $SQL); 

     setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app1", "server.com", false, true); 

     // Assign variables to session 
     session_regenerate_id(true); 
     $session_id = $user->id; 
     $session_username = $userdata; 

     $_SESSION['cid'] = $session_id; 
     $_SESSION['username'] = $session_username; 
     $_SESSION['status'] = $status; 
     $_SESSION['user_lastactive'] = time(); 

     header("Location: index.php"); 
     exit; 
} 

但這不起作用。有人可以幫助我如何修理我的課程。謝謝:)

+0

我沒有看到在代碼中正確驗證測試的部分,用戶是否可以自動登錄? – 2011-05-21 08:39:34

+0

BTW:什麼是session_encrypt?它是由你定義的函數,PHP只有一個sessino_encode函數。 – 2011-05-21 08:41:54

+0

session_encrypt是我的功能。我應該在哪裏測試正確的身份驗證? – 2011-05-21 08:43:28

回答

2

如果我正確地閱讀你的問題,你的問題是你的三個應用程序是獨立的,但託管在同一臺服務器/使用相同的PHP實例。這導致他們使用相同的PHP會話,後者得到填充不適當的垃圾。

您已經幾個可能的解決方案:

第一,最簡單的就是你的前綴會話在這種或那種方式,即用$_SESSION['app1']['param']$_SESSION['app1_param']而非$_SESSION['param']。另外,如果你將php安裝爲cgi而不是Apache模塊,那麼就是配置每個單獨的應用程序的php.ini,使它們不再共享session_id(即配置會話cookie名稱和/或路徑),也不會將會話數據存儲在同一位置(如果我正確記得,它位於/ tmp中的某處)。

1

如果您希望您的會話由每個應用程序獨立處理,那麼只需爲cookie中的每個應用程序設置唯一的sessionid可能會更容易。

setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app1", "server.com", false, true); 

setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app2", "server.com", false, true); 

setcookie("auth_key", $auth_key, time() + 60 * 60 * 24 * 7, "/app3", "server.com", false, true); 
+0

我做的山姆的事情 – 2011-05-21 09:53:51