質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DI (Dependence Injection)

DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

2010閲覧

ブラウザ毎に一意なGuidをセッションに持たせるにはどうすればよいか

OXamarin

総合スコア59

DI (Dependence Injection)

DI (Dependence Injection)は、「依存性の注入」という概念を指します。オブジェクト間で依存性のあるコードを外部の設定ファイルから注入するソフトウェアパターン設計思想です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2018/05/04 13:35

編集2018/05/04 14:34

##やっている事
ASP.NET MVCでチャットアプリケーションを作成しています。

##わからない事
ブラウザ毎に一意なGuidをセッションに持たせるにはどうすればよいかが知りたい。
普通、どうするのでしょうか?

##考えたこと
同一ブラウザからの書き込みかどうかを判断する為にセッションに一意なキー(Guid)を持たせようとしています。
1ブラウザに1つのクラスが生成されればよいはずなので、DIを行えば必然的にシングルトンになると考えました。

##試した事
Unity.MVC ライブラリを使用してDIを行いました。
セッションクラスのコンストラクタ内だけでGUIDを作成してそのGUIDを使いまわせばよいと考えました。
しかし、セッションクラスが何度もインスタンス作成されていた為、一意なGuidとはならなかったです。

##追記
・ここで言っているセッションとは、「HttpContext.Current.Session」のことを指しています。
・ASP.NET MVC "Core"ではなく、ASP.NET MVCで作成しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/04 14:02 編集

質問者さんの言う「セッション」とは ASP.NET MVC の言葉で言うと何を意味してますか? あと、Core か否かを書いてください。
退会済みユーザー

退会済みユーザー

2018/05/04 14:57 編集

> セッションとは、「HttpContext.Current.Session」のことを指しています ← では、SessionState に Guid を保持するということではダメなんですか? 多分それではダメで、ユーザー認証するしかない? Guid とか DI とか、的外れなような気がするのですが・・・
退会済みユーザー

退会済みユーザー

2018/05/04 14:56

質問者さんはどのぐらい ASP.NET の開発経験をお持ちなのでしょうか? 失礼ながら、ほとんどなさそうだと思えるのですが・・・
guest

回答1

0

ベストアンサー

ブラウザ毎に一意な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 ベースのフォーム認証など)を使うのが正解ではないかと思います。

投稿2018/05/05 04:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OXamarin

2018/05/05 22:42

回答ありがとうございます。 チャットなので、どうしてもログインさせずに使いたいと考えていました。 回答からヒントを得て実装出来ました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問