10

セッションを使用しようとしていますが、値をnullに戻す必要がある場合はどうなりますか?

私のウェブサイトは、ユーザー名をセッションに入れるログインから始まります。

Session["userName"] = login.UserName;

その後、Webサイトは新しいページにリダイレクトされます。

return RedirectToAction("Choice", new { token = token });

魔女の後、私はリンクを使って次のページに移動します。

@Html.ActionLink("Download", "Download", new {token = Model.Token})

コードをホームコントローラーのアクション結果に向けると、同じコントローラーにログイン機能があります。

@Html.ActionLink("Download", "DownloadFile", new { fileid = item.Key, token = Model.Token, platform = "windows", filename = item.Value }, new {@class = "DownloadLink" } )

セッション値をもう一度呼び出してみます。

formMobiApi.GetFile(token, fileid, platform, filename, Session["userName"].ToString(), tasks, taskId, spreadSheetStatus);

これらのアクションのいずれかが、セッション値をnullにするために何かを行っていますか?

このようなセッションを使用できますか?

4

2 に答える 2

15

web.config でセッション状態を手動で設定していない場合、デフォルトインプロセス (セッションは Web サーバーの RAM に保存されます) であり、タイムアウトは 20 分です。セッション状態の詳細については、こちらを参照してください

次のように、web.config ファイルで状態を手動で設定できます。

<configuration>
    <system.web>
        <sessionState mode="InProc" timeout="20"></sessionState>
    </system.web>
</configuration>

さて、あなたの実際の問題に。セッションが持続しない理由が正確にはわかりません。デバッグするコードのコピーがないため、うまく判断できません。推測ではHttpContext、セッションを初期化したときとは異なり、それを要求しているときとは異なるため、コンテキストキーは異なります。変更してみる

Session["userName"].ToString();

HttpContext.Current.Session["userName"].ToString();

まったく同じことを効果的に行っているため、これは一見すると少し奇妙に見えます。違いは、現在のオブジェクトが にアクセスできない場合、HttpContextどのコンテキストから読み取るかを明示的に定義する必要があることに帰着します。

あなたが提供したコードをもう一度見てみると、異常なことは何もありません - これはうまくいくはずです。これは環境/構成の問題だと本当に信じ始めています。フォーム認証を使用している場合は、web.config ファイルでタイムアウトを確認してください。また、IIS でホストしている場合 (Visual Studio の Web サーバーではありませんが、これも確認する必要があります)、アプリケーション プールを削除して再作成してみてください。

于 2012-10-29T11:02:45.093 に答える