2010-07-13 35 views
1

我目前在寫C使用CGI一個小博客/通用發佈系統作爲一種業餘愛好項目的過程,並在需要的會話管理系統來authentificate授權用戶對發帖現在,編輯和類似操作多個CGI程序會話管理通過純CGI

從幾年前的PHP工作中我記得使用超全局變量$_SESSION和一些會話初始化函數。 顯然這是不會用純CGI打交道時,這種方式工作,所以我在一個棘手的情況下就在這裏。

思維有點表明,有許多不同的方式做這樣的事情...

  1. 保存的IP地址和文件中的屬性在那裏我可以看到,如果一個特定的IP授權
  2. 同#1,但使用的SQLite數據庫(我已經引擎上的SQLite運行,因此就沒有額外的開銷)
  3. 東西與cookies可能?

而不是全力以赴和後悔是後來...什麼好人認爲?什麼是最有效的(也是最重要的)和可維護的方法?

請注意,我做不是想要得到第三方庫文件來爲我做所有複雜的事情!我開始這個項目是爲了完全自己創建一些東西(如果你在這裏忽略SQLite),並且我不想隱藏硬件部分,即使它使一切變得如此簡單。我可以只使用Python的,如果我不想折磨自己:)

回答

3

基於Cookie的會話管理是要走的路。您不能僅僅使用IP地址,甚至不使用IP地址+瀏覽器組合,因爲當人們使用代理服務器或NAT後面的服務器會失敗。

只需發送瀏覽器中的哈希值在cookie中,然後驗證對你的記錄中的散列對於用戶來說,如果匹配,你就可以訪問這些數據爲用戶的會話。

考慮增加對散列的到期機制。在安全性和易用性之間存在折衷,因爲相同散列對用戶有效的時間越長,用戶容易受到cookie竊取攻擊的時間越長。

到期機制也將使您從數據庫中刪除過時的會話數據(或者文件,如果你選擇這樣做。)

+0

謝謝,我只需要決定在哪裏保存我的會話現在..也許在我的sqlite數據庫,只是爲了一致性。 – LukeN 2010-07-13 18:20:45