2017-10-26 7 views
0

私はgrailsを使って簡単なweb-appを作成しようとしています。grails - ブラウザのタブごとに新しいセッションを作成する方法

ここで、開いているすべてのタブに同じデータが表示されないように、同じページを別のタブで開くと、新しいセッションを作成する必要があります。

ページが新しいタブで開かれたことを定義できますか?コントローラアクションで新しいセッションを作成する方法は可能でしょうか。

またはブラウザのタブIDのようなものを取得する方法がありますか?

答えて

2

セッションがどのように動作し、割り当てられているか誤解しているようです。

セッションはブラウザ(およびドメイン/ホスト)ごとです。

コントローラアクションで新しいセッションを作成することはできますが、それはブラウザのすべてのタブのセッションになり、前のセッションが無効/放棄されるため役に立ちません。

ブラウザのタブIDはありません。

データアフィニティをブラウザセッションに基づいて引き起こしている根本的な問題に対処する必要があります。他の何かに基づいてそれを作る。 (これはあなたの質問の一部ではなく、あなたは詳細を提供していないので、一般的な示唆です。)

+0

私の場合、ユーザーがボタンをクリックするとデータの一部が生成され、別のタブを開くとデータがそこに表示されますが、別のタブであることを前提にして、負荷。私はセッションが私を助けることができると思ったが、間違っていた。だから、私は追加のURLのパラメータが役立つかもしれないが、確信していないと思う。 – Roman

0

これは私の考えです。

あなたが達成しようとしているのは簡単ですが、各セッションが春のセキュリティのユーザ名か実際のHTTPセッションIDかを把握し、訪問したコントローラのアクションを保存するメカニズムが必要ですこれを何度も何度もチェックしながら、これを一貫して更新し続けること。 「10001」は、あなたのマップのあなたの鍵であり、あなたのセッションIDです

[ 
['10001':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1'], 
], 
['10002':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1'] 
] 

ような単純な 何かが、それはあなたがキャプチャし、彼らががあった場合に動作するようにしようと訪れた場所の内部マップのリストが含まれていますすでに基本的に質問があります....

何人かの人は、何かアクション1を見たことがあると言いますが、アクション1とアクション2を見たときに何が起こるのでしょうか? ?

いずれにしても、上記のようなマップを含むセッション変数としてすべてを行うことができます。ヒットする問題は、同時マップ(更新と同時に読み込まれる)です。 このような問題を回避するために、同時ハッシュマップの使用を検討する必要があります。

上記のすべての問題は、すべての可能なオプションを確認した後、次に何を確認したのかの一貫したロジックですか?

タイムスタンプのベースとは異なる視点から考えてみて、クエリを移動したり、タイムスタンプに基づいてランダムに別の出力をランダムに生成したりする方がずっと良いと思います。ユーザーに関係なく変更する

+0

実際には、セッションIDごとに格納されるインクリメントになる可能性があるので、コントローラのヒットごとにsession.visited =(session.visited?:0)+1して、レンダリングビュー= "index $ {session.visited} index0.gsp index1.gsp index2.gspなどを開き、上のいずれかのインクリメントと1ページ以下のページから始まるページは、基本的な例として0から始まります – Vahid

関連する問題