2010-07-10 71 views
5

我們有一個用zend框架編寫的PHP應用程序,並想知道如果我們想讓用戶登錄超過一天,最好的方法是什麼,例如,一週或更多。保持登錄在PHP應用程序爲+1周

我們是否需要會話? (使用表空間和內存?)還是使用cookie更好? (安全性?)

+0

你現在在使用什麼? – 2010-07-10 10:30:18

回答

3

HTTP是無狀態的,這意味着Web服務器會在服務完您的請求後忘記您是誰。會議是解決這個問題的方法。當使用Sessions時,瀏覽器和服務器將在每個請求上交換一個標識符,讓Web服務器將以前存儲的數據連接到這個特定的請求者。

ID是通常是存儲在Cookie中。將您的會話Cookie設置爲在一週內過期,並且您已全部設置爲讓您的用戶登錄一週。

+0

你是說我們應該保持一週的會話嗎?會不會佔用會話表數據/內存?或者,即使有很多用戶,這也不算什麼大問題? – Jorre 2010-07-10 11:04:57

+0

@Jorre取決於你將什麼扔進會話存儲器,以及許多用戶是什麼以及系統具有哪些硬件容量。任何系統遲早會達到它的容量。 – Gordon 2010-07-10 11:14:45

+0

+1這些偉大的文章的鏈接:) – coldfix 2012-05-15 23:29:36

1

嚴格地說你不需要會話。您混淆了兩件事:

  • 會話用於爲特定用戶存儲數據服務器端的數據。這可能包括用戶登錄的用戶名。會話通常相對較短(例如,在幾分鐘或幾小時不活動後過期)。會話cookie(即在用戶關閉瀏覽器後過期的cookie)通常用於將給定用戶關聯到給定會話,但可以使用其他其他方法,例如在URL中傳遞會話ID(小心會話固定在這種情況下)。
  • 對於長期居住的登錄,通常會將用戶憑據或某些中期用戶憑據代理存儲在設置爲在幾周或幾個月後過期的非會話Cookie中。每當用戶沒有與他關聯的活動會話時,就會使用這些憑據在沒有用戶交互的情況下啓動此類會話。

因此,基本上,Cookie用於兩個目的 - 存儲短期(小時或小時)會話ID並將用戶憑證存儲幾天/幾周/月。

+2

我不同意第二個要點。切勿在Cookie中使用憑據。這是不安全的。此外,沒有理由說Session或它的Cookie應該是短暫的。瀏覽器關閉時刪除的Session Cookie只是默認設置。這可以非常容易地改變爲任何你想要的。 – Gordon 2010-07-10 10:44:16

+0

@戈登它只是不安全,如果你讓它不安全。您可以將cookie標記爲安全,然後僅通過https發送。 – Artefacto 2010-07-10 10:46:41

+1

這隻會使用從客戶端到服務器的HTTPS。此外,我不明白爲什麼我應該使用第二個cookie時,這可以很容易地與會話Cookie單獨處理。終身一生。 – Gordon 2010-07-10 10:49:30

1

「記住我」始終是安全漏洞,無論您使用的是cookie還是會話 - 某人可以(理論上)竊取cookie,從而無需任何密碼即可進入帳戶。有許多方法可以通過允許在相同的IP下進行召回來提高安全性。 Cookie是AFAIK不太安全,但這取決於您實施身份驗證的方式。例如,通過在cookie中保存密碼散列,你幾乎可以給入侵者一個真實的密碼(這是一個不允許的,它可以在其他webapps上使用),因爲有字典可以從散列中獲得簡單的密碼。醃製散列幫助不多。

總而言之,會話是最簡單和最好的方式。如果您爲應用程序使用多個網絡服務器,請使用表格,否則磁盤上的會話可以使用。

+0

您仍然使用cookie來實施會話,如果有人截獲cookie,他可以劫持會話。所以真的,提出一個會議與餅乾二分法是沒有多大意義的。會話是一個不同的,更抽象的概念,Cookie是實現這種概念的一個常見部分。 – Artefacto 2010-07-10 10:53:13

+1

會話使用cookie,寫在我的第一句話中。但是,如果cookie被盜,服務器還可以比較用戶的IP並拒絕自動輸入。這也提到;) – 2010-07-10 21:40:13