2011-07-05 78 views
0

我正在C#中構建一個Web服務(ASMX)。我正在考慮使用ASP.net會話ID作爲身份驗證令牌。ASP.net:是否有可能從會話ID手動初始化會話

我有用CreateSessionID生成的session-id。這將在成功認證後發送給客戶端(作爲web服務調用'login'的返回值)。

對於後續請求,客戶端會將session-id作爲參數發送到Web服務調用。是否有可能從此會話ID字符串重新創建會話?

在此先感謝。

回答

6

這種方法的問題是CreateSessionID實際上並沒有創建會話。顧名思義,它只創建一個唯一的會話ID。如果你看一下MSDN documentation,它說

此方法並非是 從應用程序代碼調用。

如果您多讀了一會,您會發現該方法將被自定義會話ID管理器覆蓋,然後可以通過編輯web.config將其集成到會話管理系統中。

換句話說,您當前使用的CreateSessionID並沒有做你想做的事。

如果你真的想在你的web服務中使用會話狀態,你應該看看this article

簡而言之,您需要將EnableSession=true參數添加到您的[WebMethod]屬性中,然後您可以通過Context.Session自動訪問會話。請注意,這不需要通過服務傳遞會話ID,因爲IIS將爲您處理所有事情。

可以使用CreateSessionID()方法(但最好你用別的東西)來創建一個令牌的用戶需要與每個請求通過,但它只會被用來驗證用戶;根據它不能重新生成會話。如果您確實走這條路線,請確保您的服務通過HTTPS訪問。否則,任何竊聽者都將以純文本的形式看到該令牌(儘管如果您還檢查IP地址/用戶代理字符串/等,這可以減輕)。

希望有所幫助。

相關問題