1

私のasp.netアプリケーションには、いくつかのセッション変数があります。ローカルホストとウェブホストでほんの数分であるように見えます、彼らは価値を失います。これは、常にではなく定期的に発生します。私は安いgoDaddy、Webホスティングを持っています、そしてそれはWebサーバーの問題かもしれません。助けてくれてありがとう、これは大きな問題です。

   <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="3600" defaultUrl="~/" name="" />
    </authentication>
    <sessionState mode="InProc" cookieless="false" timeout="80" />

 public static User User
    {
        get
        {
            User userLogin = null;
            object sessionVar = Session[USERLOGIN];
            if (sessionVar != null)
            {
                userLogin = (User) sessionVar;
            }
            return userLogin;
        }
        set { Session[USERLOGIN] = value; }
    }
4

2 に答える 2

4

サーバー上で、停止および開始されているアプリケーションプール、タイムアウト、またはその他のホストからセッションが消去されている可能性が高くなります。重要な点は、セッション変数自体は信頼性の低い永続的なメカニズムであるということです。

ログインしたユーザーの情報を保持する必要がある場合は、ユーザーのマシンにCookieを保存してみてください。セッションがヌルの場合は、Cookie内のデータの識別からCookieを再入力してください。

于 2012-08-22T02:00:48.760 に答える
1

もし私がコメントできるなら、私はそうするでしょう、明らかに私は十分に特別ではありません;P笑。両方の点で、KodeKreachor と Aristos に同意する必要があります。セッション状態をメモリに保持するビジネス/合理的な必要性がある理由がわかりません。

ポイントに加えて、主に私はクッキーが嫌いなので、セッション状態を軽量データベースに記録しておくソリューションをロールバックできます。つまり、Cookie の目的は、情報のフラット ファイル データベース レコードだけです。SQLiteは良い解決策かもしれませんが、他に見つけられない限り、あなたはそれで独自の解決策を展開しています. はい、愛情のある Godaddy サポーターとして、彼らの安価なサービスには多くの要望があります。システムが共有ホスティングで何をしているかを制御することはほとんどありません。許可されているものと許可されていないものについて技術部門と何時間も話し合った私の経験から、それがわかります。

また、Log4Net などのソリューションを使用して非常に詳細なログをシステムに追加し、ログを解析して、セッション状態がワイプされているときに実際に何が起こっているかについての情報を取得することもできます。次に、その情報を武器に、より明確な解決策を見つけようとします。

または、簡単にクッキーを使用してください ;)

これを SQLite =D に変更するだけです
HOW TO: ASP.NET セッション状態を格納するように SQL Server を構成する

もちろん、ここに SQLite セッション状態プロバイダー
SQLiteSessionStateStoreがあります

アパッチ Log4Net

BeefyCode による Log4Net の使用に関する優れたチュートリアル シリーズ

于 2012-08-22T02:31:36.790 に答える