2012-03-21 13 views
3

私は初めてのMVC3アプリケーションを起動しました。ユーザーが自分のサイトにアクセスしてログインすると、そのユーザーに関するデータを含む.ASPAUTH Cookieが設定されます。時間が過ぎるまでうまくいく。 Cookieがブラウザに入っていても、もう一度ログインする必要があり、1年後に有効期限が設定されていることがわかります。私のlocalhost上で正常に動作します。 私の情報をクッキーに設定するのではなく、何とかセッション中ですが、1時間以内にコンピュータを再起動してもまだログインしています。しかし、1時間後にウェブにアクセスしないと私はログアウトしています。MVC3はクッキーを受け入れません

ありがとうございました。

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
       1, 
       requestedUser.Name, 
       DateTime.Now, 
       DateTime.Now.AddYears(1), 
       true, 
       string.Format("{0};{1};{2}", requestedUser.IDUser.ToString(), requestedUser.IsAdmin.ToString(), profilePicture)); 

      string encryptedTicket = FormsAuthentication.Encrypt(ticket); 
      HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
      cookie.Expires = keepLogged == "keepLogged" ? DateTime.Now.AddYears(1) : DateTime.Now.AddHours(1); 

      this.Response.Cookies.Add(cookie); 
      return RedirectToAction("Index", "Posts"); 
+0

アイドルタイムアウトが原因で、おそらくアプリケーションプールが再起動してセッションクッキーが無効になります - http://stackoverflow.com/questions/4277944/セッションを失うことなくリサイクル可能なiis-application-poolsです – tawman

+0

フォーム認証を設定しているコードを表示できますか? –

+0

@tawman助けてくれてありがとうが、ク​​ライアントのブラウザにCookieが表示されているのはなぜですか?申し訳ありませんが不満な質問が、私は本当にこれを解決し、何が間違っているか理解していない。 – Petr

答えて

6

あなたはあなたがそれを行うには、このhttp://aspnetresources.com/tools/machineKeyツールを使用することができますが、あなたはそれをイントロweb.configファイルを貼り付けする必要がweb.configファイルでのmachineKeyを設定するには、この

<machineKey validationKey="4B79DF965DC586D2B267BDECB4580D40EE6811EE171AC65D929BECD8865C09ED8681B92F2177FE9F72B8E822B26914C79C1FF590CCEE65469CBC6FACD7D9F203" decryptionKey="CF39BCCD33BC38D17A704DFEB85AD9C5F265669FCD6AB54C" validation="SHA1" /> 

ようなものが必要。

アプリプールがリサイクルするたびに、アプリが再起動され、web.configに設定されていない場合、新しいマシンキーが自動的に生成されます。 FormsAuthentication Cookieはそのマシンキーでハッシュされ、変更されるたびにCookieが無効になります

+0

これは私が探していた解決策のようですが、試してみます。 – Petr

+0

MikeSWありがとう、それは完全に動作します。 – Petr

関連する問題