2013-08-06 12 views
8

この質問は以前に聞かれたかもしれないが、自分の状況に正確に合致するものは見つけられないことがわかった。asp.netのWebページで "Remember Me"

ASP.Net Webページ(ではなく、 Webフォーム)とWebMatrixのWebMailヘルパーを使用してWebサイトを作成しました。ユーザーはウェブサイトにログインする必要があり、ログアウトを選択するまで(理論的に)ユーザーがログインしたままにする「Remember me」ボックスがあります。ウェブサイトは、ブラウザを閉じてから20-30分以内に再度開くと、ユーザをログイン状態に保ちます。しかし、Webサイトにアクセスしていない20〜30分後に、ユーザーはログアウトされます。 (さて、この問題は、WebMatrixテンプレートの "Starter Site"テンプレートでも存在するようです。)

私は複数のソリューションを試しましたが、その多くはスタックオーバーフローに掲載されましたが、何も動作していないようです。

+0

をチェックし、あなたは何複数の解決策」を試してみましたか?私たちはそれらを繰り返さないように知っているだろう。 – Artless

+0

残念ながら、私は動作しなかった試行を保存しなかったので、私が試したことを正確に伝えることはできません。私のウェブサイトからアクセス可能なクッキーを作成しようとする人がほとんどでしたが、クッキーを正しく作成したかどうか、またはそのクッキーにアクセスしようとするのが正しいかどうかはわかりません。 – CarolK

+0

私はそのコードテンプレートのどこかに、現在のセッションの非アクティブ期間をチェックする条件があると思います。認証コードを調べて、時間のチェックなどがあるかどうかを確認します。 – ZorleQ

答えて

10

EDIT 2

フォーム認証で使用されるクッキーは、「.ASPXAUTH」と呼ばれ、デフォルトでは30分後に期限切れになるように設定されています。

web.configにアクセスし、authentication要素を見つけてください。あなたは、このようなように、そこ(分)クッキーの有効期限を設定することができます。

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" 
       name="myCookie"     <!-- optional, if you want to rename it --> 
       timeout="2880" />    <!-- expires in 48 hours --> 
    </authentication> 
</system.web> 

OR

をコンフィグがあなたを失敗した場合は、この記事を試してみてください。Link

あなたは」既存の認証チケットをクリアしてカスタムチケットを作成する必要があります。手動(期限切れはありません)あなたのユーザーにマップされたGUIDを含むクッキーを作成することができ

if (rememberMe) 
    { 
     // Clear any other tickets that are already in the response 
     Response.Cookies.Clear(); 

     // Set the new expiry date - to thirty days from now 
     DateTime expiryDate = DateTime.Now.AddDays(30); 

     // Create a new forms auth ticket 
     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, loginModel.UserName, DateTime.Now, expiryDate, true, String.Empty); 

     // Encrypt the ticket 
     string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     // Create a new authentication cookie - and set its expiration date 
     HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
     authenticationCookie.Expires = ticket.Expiration; 

     // Add the cookie to the response. 
     Response.Cookies.Add(authenticationCookie); 
    } 
+1

それは正しいですが、一部のホスティングでは、設定のタイムアウトが許可されず、設定を上書きしても上書きされます。 – PiLHA

+0

2番目の考えでは、セッションタイムアウトの設定は良い解決策ではありません。彼のクッキーは単にタイムアウトするので、正しい解決策はユーザーがログインしたときに有効期限を設定することです。答えを更新しました。 – Artless

+0

だから、トリッキー、上記のコードは修正を反映していますか? – CarolK

-1

:それは、ユーザーがremember meオプションを選択した場合に実行する必要があるコードのこの部分に沸きます。ユーザーがユーザーのログインページにGETすると、そのCookieを読み取り、GUIDを確認してユーザーを認証できます。リンクに

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

http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

http://www.codeproject.com/Articles/31914/Beginner-s-Guide-To-ASP-NET-Cookies

関連する問題