2012-03-03 52 views
0

我正在编写一个应用程序,它在加载之前显示登录表单,并向我以前开发的Web应用程序发送POST请求。如何处理来自MVVM应用程序的持久登录?

我可以发送登录信息并返回200条消息,并可以接收该请求中的数据。不过,我现在希望在应用程序关闭后存储此登录信息,以便用户在每次打开应用程序时都不必登录,或者在此情况下重新启动计算机。 (它将在启动时运行,但需要维护应用程序而不是WCF服务)

我在C#中使用HTTPWebRequest来处理POST请求到服务器,并且我可以在服务器端创建cookie。如何让我的应用程序知道这些cookie并以安全的方式存储它们以允许我的整个应用程序持续登录?我已经看了许多方法来存储cookie在C#中,如这两个环节:

http://www.c-sharpcorner.com/uploadfile/mahesh/managing-cookies-in-a-wpf-application/

http://msdn.microsoft.com/en-us/library/dd920298(v=vs.95).aspx

然而,在第一个链接的代码给了我一个奇怪的cookie:

“CSCUser2 = test-username; android_developer_C:_width = 243px; __utma = 1.1718972007.1316996246.1316996246.1316996246.1; __utmz = 1.1316996246.1.1.utmcsr =(direct)| utmccn =(direct)| utmcmd =(none); android_developer_reference_lastpage =/C :/AndroidSDK/android-sdk-windows/docs/reference/android/speech/RecognizerIntent.html“

所以我不确定这种方法是否最好?任何指针将不胜感激。

回答

1

我认为CookieContainer(即MSDN链接)是设置和获取cookie的正确方法(顺便说一句:请注意,您的问题与wpf或mvvm模式无关。它是一个通用的c#/.net。/httpwebreuqest主题)。

至于在用户机器上缓存可以在后续会话中使用的凭证 - 有几种方法可以做到这一点。您可以将用户密码存储在安全位置,也可以存储从服务器发送给您的会话密钥。第二种方法的优点是会话密钥在时间上有限(例如一周),并且之后他们用户将不得不执行新的登录。会话密钥可以从服务器传送到您的服务器,作为cookie或特定的API。 Web应用程序使用cookies是因为它们无法访问任何持久性存储,但您的wpf应用程序可以在任何需要的位置存储密码或会话密钥。

我建议您使用DPAPI来坚持用户计算机上的秘密。用于c#和DPAPI的Google可以查看如何在.net中执行此操作。