質問: やっている事 ------ ASP.NET MVCでチャットアプリケーションを作成しています。 わからない事 ------ ブラウザ毎に一意なGuidをセッションに持たせるにはどうすればよいかが知りたい。 普通、どうするのでしょうか? 考えたこと ----- 同一ブラウザからの書き込みかどうかを判断する為にセッションに一意なキー(Guid)を持たせようとしています。 1ブラウザに1つのクラスが生成されればよいはずなので、DIを行えば必然的にシングルトンになると考えました。 試した事 ---- Unity.MVC ライブラリを使用してDIを行いました。 セッションクラスのコンストラクタ内だけでGUIDを作成してそのGUIDを使いまわせばよいと考えました。 しかし、セッションクラスが何度もインスタンス作成されていた為、一意なGuidとはならなかったです。 追記 -- ・ここで言っているセッションとは、「HttpContext.Current.Session」のことを指しています。 ・ASP.NET MVC "Core"ではなく、ASP.NET MVCで作成しています。
回答: > > ブラウザ毎に一意なGuidをセッションに持たせるにはどうすればよいかが知りたい。 > > > ここで言っているセッションとは、「HttpContext.Current.Session」のことを指しています。 > > > 上記の質問に対して、ホントに Guid を使うのが適切か等の余計なことは何も考えずに、ダイレクトに答えると・・・ Session への Guid の設定は以下のようにして、 ``` public ActionResult Index() { if (Session["Guid"] == null) { Session["Guid"] = Guid.NewGuid(); } return View(); } ``` Session からの Guid の取得は以下のようにして可能です。 ``` public ActionResult About() { var guid = Session["Guid"]; if (guid != null) { ViewBag.Guid = ((Guid)guid).ToString(); } return View(); } ``` 旧来の Web Forms アプリと全く同様に Session クッキーが発行され、それを元に Session からデータを取得してくるという仕組みなので、「ブラウザ毎に一意なGuid」という条件は満たされます。 ただし、その先、その Guid で、 > > 同一ブラウザからの書き込みかどうかを判断 > > > をどう実装するかは質問者さん次第です。 想像ですが、コメントに書いたように多分それではダメで(望むようなユーザーの識別はできない、もしくは実現が困難なので)、ユーザー認証(ASP.NET Identity ベースのフォーム認証など)を使うのが正解ではないかと思います。