1

これは、セッションの開始と終了のサンプル コードです。

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}

MVC6 以降、global.asax ファイルはありません。では、owinミドルウェアでセッションの開始と終了を処理する方法。可能であれば、コード例で議論してください。ありがとう

4

1 に答える 1

0

やりたいことを .NET Core 1.0 で再現するのは非常に困難です。SessionStartおよびSessionEndイベントは存在せず (また、それらを導入する予定はありません)、いくつかのトリックを使用してそれらを「複製」しようとすることしかできません。この非常に明確な記事で明確に指摘されているように、

ASP.NET Core 1.0 の背後にある原動力の 1 つは "クラウド対応" であるため、セッション管理の設計は分散シナリオで機能させることに重点が置かれてきました。Session_End は、セッションが inproc モード (ローカル サーバー メモリ) を使用し、チームがローカルでのみ動作する機能を追加しないと述べた場合にのみ発生しました。

ところで、セッションの使用に関する短い答え:

設定

次のエントリをproject.jsonファイルの依存関係ノードに追加します

"Microsoft.AspNet.Session": "1.0.0-rc1-final"

ConfigureServices を変更して、セッションをアクティブにします。

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddSession(options => { 
            options.IdleTimeout = TimeSpan.FromMinutes(30); 
            options.CookieName = ".MyApplication";
        });
}

次に、次のようにアクティブ化できます。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseSession();
    //removed for brevity
}

使用法

HttpContext.Session.SetString("Name, "Foo");
HttpContext.Session.SetInt32("Age", 35);

また

var name = HttpContext.Session.GetString("Name");
var age = HttpContext.Session.GetInt32("Age");
于 2016-03-24T08:21:51.893 に答える