3

「Remember Me」機能を実装しています。ユーザーがログイン/パスワードを再度入力する必要がないようにします。

ローカルでは機能しているようですが、共有ホスティングでは、約15分間持続してからログアウトします。コードは次のとおりです。

コントローラー:

FormsAuthentication.SetAuthCookie("username", true);

Web.config :

<authentication mode="Forms" >
    <forms loginUrl="~/Account/LogOn" timeout="262974" cookieless="UseCookies" />
</authentication>
<sessionState mode="InProc" timeout="262974" cookieless="UseCookies" />

編集

sessionState を追加しましたが、サーバーではなくローカルで作業しているのと同じ問題がありますか?

私は何が欠けていますか?

4

3 に答える 3

4

web.configのsessionstate要素を調べます。例えば:

<sessionState mode="InProc" timeout="60" />

web.config のsessionstate要素とforms要素の違いについては、次のSOの質問を確認してください。formsauthtimeoutとsessiontimeoutの違い

@wompが受け入れた回答は、次のように述べています

匿名であるかどうかに関係なく、新しいユーザーがWebサイトにアクセスするたびにセッションが開始されます。認証はSessionとはほとんど関係がありません。

認証タイムアウトは、ユーザーのブラウザで認証Cookieが有効である時間です。Cookieの有効期限が切れると、サイト上の保護されたリソースにアクセスするために再認証する必要があります。

したがって、認証Cookieの前にSessionがタイムアウトした場合、それらは引き続き認証されますが、すべてのセッション変数が消え、セッションの欠落によって引き起こされるnullやその他の条件をチェックする訓練を受けていない場合、Webサイトでエラーが発生する可能性があります。

セッションの前に認証がタイムアウトした場合、すべてのセッション変数は引き続き存在しますが、再度ログインするまで保護されたリソースにアクセスできません。

于 2012-06-06T13:52:54.440 に答える
3

私はついに解決策を見つけました。StateServer代わりにInProcマシンキーも使用する必要がありました。完全な解決策は次のとおりです。

コントローラ:

FormsAuthentication.SetAuthCookie("username", true);

Web.config:

<authentication mode="Forms" >
    <forms loginUrl="~/Account/LogOn" timeout="262974" cookieless="UseCookies" />
</authentication>

<sessionState mode="StateServer" timeout="262974" cookieless="UseCookies" />

<machineKey validationKey="5BAE63F50C69C1BBB7BFC2E696674389C307E28E9DEB60FB273B85CAD8FC3C2261FB13DF92B90A99C6EB684FDB1F6E3E92E1A42083EB77B5918126DD52245FB5" decryptionKey="11F6FE0C790413FFF3E230387168016B212216DEF727C4157CDDD0558BEAE5B7" validation="SHA1" decryption="AES" />

私はArvixeと共有ホスティングを行っていますが、解決策を見つけたのは Arvixe のサポートにあります: support.arvixe.com

于 2012-06-06T21:08:22.210 に答える
0

ASP.NET 設定に移動し、セッション設定までスクロールして、「値」なしを「フォーム」に変更します。 認証モードに移動

于 2016-07-22T07:31:18.483 に答える