2009-12-09 24 views
1

我的網站是flash。登錄也在閃存中。這是登錄流程:這是一個不錯的登錄算法在Flash,PHP和MySQL?

  1. 輸入用戶名和密碼

  2. 發送到authentication.php頁

  3. 這是我authentication.php頁上的疑問:

    (1)查看帖子參數,即用戶名和密碼

    (2)Sha/hash密碼

    (3)1季度用戶表(查詢1),選擇用戶名和密碼

    (4)如果匹配,做另一個查詢(Q2),檢查用戶是否仍然在禁止狀態

    ( 5)如果用戶未處於禁止狀態,則執行查詢(Q3)以檢查用戶是否今天第一次登錄

    (6)如果其第一次登錄,則更新查詢(Q4)以獎勵一些錢給用戶

    (7)使用md5創建會話,userid,哈希會話變量。即

    $ _SESSION ['loggin'] = 1;

    $ _SESSION ['hash'] = md5(username.secret);

    (我用的是$ _SESSION [「散」]在另一頁另一種身份驗證,請忽略此)

  4. 返回結果閃爍。

我知道它非常糟糕的登錄流,很多mysql查詢,2哈希(php計算)。我仍在思考/尋找更好的方法。就像結合查詢等任何想法如何改善流? (我必須滿足我上面提到的所有東西)

[當前的登錄速度緩慢]

回答

1

要得到這個問題的一個更抽象的視圖的回答下列問題將有所幫助:

  • 你在開發什麼環境? 100%本地(本地代碼和Db或本地代碼和外部Db?等)?
  • 這是所有100%'新鮮'的代碼,你有沒有開發類似的東西,沒有這些問題?

在旁註中,我使用了Chromes內置的資源監視器,它顯示了網頁大小和下載所用時間的細分情況。我覺得這比FireFox/FireBug中的更有用。

您是否測試過每個查詢,比如PHPMyAdmin或類似於測試查詢時間?加起來每個查詢的總時間,看看有什麼不同。

祝你好運, 亞歷克斯

+0

另外,當你說這很慢,你說幾秒鐘?時間總是相同嗎? – Alex

+0

- 我正在測試本地代碼和數據庫,並將其放到真實服務器上以查看性能。它在當地很好,但實時,它的速度要慢得多 - 實際上並不新鮮,但迄今爲止這個數據記錄最多。以前是幾千條記錄。這一點比那更多。 Chromes公告資源?好的,我會去嘗試使用它。 SOmetimes我在PHPMyAdmin上進行了查詢,它總是返回0.00xx秒,我認爲這非常快。但在網站上,登錄速度很慢,需要5秒以上。 (也許它不是MySQL問題)?? 謝謝 – mysqllearner

+0

恩..讓我改變這一點。根據上面提到的當前登錄流程,我當前的數據庫用戶擁有50K ++記錄,登錄時間超過5秒是否正常?因爲之前創建的網站,登錄速度很快,比這個快得多 – mysqllearner

0

的過程本身並不壞。

真的很難分辨爲什麼它沒有性能數據很慢。在你完全不同的地方,有90%的機會失去了你的想象。在打印當前時間(包括毫秒)的代碼中添加幾行代碼,以查看它掛起的位置。

一個連接當然可以幫助,但如果沒有花時間,它會使代碼更難理解和維護。如果您發現數據庫訪問需要很長時間,我建議檢查您的查詢是否有正確的索引。如果索引正常,如果您需要編寫聯接的幫助,請使用表的DLL發佈問題。但首先,衡量表現。

+0

你如何衡量表現?我的方法是通過螢火蟲。啓用「網絡」並查看時間響應。如何檢查查詢時間? – mysqllearner

+0

那麼,大多數情況下,我的索引是主鍵,userid或whateverid。因爲這些是我用來搜索的最多的。任何幫助或建議將非常感謝:) – mysqllearner

+0

測量性能:將日誌記錄調用放入服務器代碼。至於查詢,「EXPLAIN」是你的朋友:http://dev.mysql.com/doc/refman/5.0/en/explain.html –

1

嗨,我寧願做一個連接查詢。

SELECT u.user_id, u.name, u.password, u.last_last FROM users u 
LEFT JOIN banned b ON u.user_id = b.user_id 
WHERE u.name = ? AND u.password = ?; 
0

的幾點思考關於性能和安全性:

步驟3 - 6:從數據庫中讀取數據時,你應該能夠在一個單一的查詢來選擇用戶名,密碼,用戶狀態和上次登錄日期,如果你的數據庫設計正確(就像ArneRie剛剛發佈僞MySQL語句來做到這一點)。

更新用戶(給予他們獎勵)是一次性INSERT/UPDATE,不應該對性能產生太大影響。

除了減少MySQL查詢的數量(並且可選地使用s alted hashes for passwords),該過程看起來沒問題。

+0

那麼,我猶豫做的一件事情是,如果用戶名和密碼沒有匹配,我可以立即返回結果,登錄失敗。如果我結合查詢,意味着它選擇更多的東西,它可能需要更多的毫秒來回應。但是,我也知道,用戶名和密碼不匹配的可能性非常低,除非他試圖破解。也許我錯了。請諮詢 – mysqllearner

+0

「組合」,我的意思是做組合查詢。輸入速度太快,對不起我的英文不好 – mysqllearner

+0

在ArneRie的例子中使用JOIN將會非常非常接近於同樣的(性能方面)和僅僅爲用戶的信息進行選擇。您的腳本執行得更好的MySQL語句越少。 – leepowers