2009-05-28 61 views
0

當我刷新我的Flex應用程序時,頁面不保持其狀態並返回登錄頁面。我不知道爲什麼會出現這種情況,下面是我的代碼處理會話。刷新期間的會話問題

公共職能doLogin($的用戶名,密碼$){

 include("connection.php"); 
     session_start(); 
     session_register("session"); 


     $query = "SELECT * 
        FROM users 
        WHERE username = '".mysql_escape_string($username)."' 
        AND password = '".mysql_escape_string($password)."'"; 
     $result = mysql_fetch_array(mysql_query($query)); 
     if(!$result) { 
     session_unset(); 
     return 'no'; 
     } 
     else 
      { 
     $session['id']=session_id(); 
     $session['username']=$username; 
     return 'yes'; 
      } 
     } 

    public function Logout() { 

    session_start(); 
    session_register("session"); 
    session_unset(); 
    session_destroy(); 
    return 'logout';   
    } 

我應該做一些對我的Flex窗格中一個成功登錄後加載。

回答

0

你的問題是在這裏

else 
        { 
      $session['id']=session_id(); 
      $session['username']=$username; 
      return 'yes'; 
        } 
      } 

$ session中沒有定義...如果你想存儲的東西會話陣列中使用$ _SESSION

0

成功登錄後重定向回其他頁面。

例如

if(doLogin($user,$pass) == 'yes') 
{ 
    Header("Location: index.php"); 
    exit; 
} 
0

通過刷新你的意思是重新載入頁面(F5)。如果是這樣的話,那就是原因!重新加載/刷新將重新初始化所有內容。所以當你重新加載/刷新時,你的起始狀態(登錄)將會顯示。

如果您希望維護應用程序狀態,那麼每次狀態更改時都必須將其詳細信息保存到數據庫,然後當用戶點擊起始頁時重新加載其會話。

如果瀏覽器被刷新/重新載入(或崩潰等),那麼你無法讓應用程序註銷用戶,所以當登錄頁面被擊中時你必須恢復到最後知道的狀態。如果用戶沒有正確登錄,這當然會帶來重大的安全問題。

0

您是否在Flex應用程序中維護會話ID,並將它與新請求一起發送?

您能否測試&確認Flex中每個請求上的PHP腳本都返回相同的會話ID?

您是否將會話ID保存在Flex應用程序之外的cookie中?如果沒有,您將在頁面刷新時丟失會話ID。您需要存儲在本地存儲或cookie中,並在Flex應用程序啓動時訪問它。