[英]minimal session management for single login?
我已經編寫了一個用於預訂商品的C / CGI Web應用程序。 我的客戶要求我添加“管理員”功能,授權用戶可以刪除和更改數據,而非授權用戶只能添加數據。 它在概念上比大多數登錄實現要簡單得多,因為只有一個密碼,並且實際上只有兩個狀態,即“匿名”和“管理員”。
我來自PHP背景,其中會話管理與session_start()
一樣簡單,並且我可以立即使用$_SESSION
。 當然,在C / CGI中沒有這樣的內置函數。 我想避免添加CGI庫依賴項(我已經依賴於glib,迷惑和libmysqlclient,而且我很想了解會話管理)。
在C / CGI中進行基於密碼的會話管理的最簡單方法是什么,而無需多個用戶,大量的會話數據或任何復雜的東西?
會話表示服務器端保持狀態。 由於您沒有用戶,我想您希望它更簡單。 如果是這種情況,則帶有過期日期的簽名Cookie可以做到這一點。 本教程將展示如何使用Python進行操作:
首先,您必須決定如何在瀏覽器中保持狀態:您將要使用會話cookie還是在每個頁面上傳遞會話令牌? 如果采用Cookie方式,則無需更改頁面和表單,但是如果尚不存在Cookie管理,則需要添加它(請注意使用會話+ httpOnly cookie)
然后,您必須決定如何獲取有關服務器上狀態的數據:如果您已經在使用數據庫,則可以添加帶有列“ SESSION_ID”和“ EXPIRATION_DATE”的“ SESSION”表以及帶有“ SESSION_DATA”的第二個表列“ SESSION_ID”,“ KEY”,“ VALUE”。
您現在“只需”必須創建一些簡單的功能:
int session_createNewSession(long& session_id, long duration)
int session_setValue(long session, char[] key, char[] value)
int session_getValue(long session, char[] key, char[] value)
int session_abandonSession(long session)
如果無法創建會話或無法設置/獲取值,則此函數將返回錯誤代碼。 您可能還應該創建一個在數據庫上定期運行的作業,以刪除較舊的會話。
現在您已經有了會話系統,其余的工作非常簡單:
實際上,您可以做得更簡單:在您的情況下(只有一個數據庫表),僅一個session_createNewSession(long&session_id,int isAdmin)就足夠了,但是隨着時間的流逝,您的客戶端可能會問更多功能,不是嗎?
最后一點:請注意您的session_id是隨機的,而不是縮進字段,否則劫持其他人的會話將非常簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.