4

ユーザーの接続IDを維持しようとしています。つまり、彼がページを更新しても同じ接続IDを取得します

これは私が今までできることです

ジャバスクリプトの部分

// Start the connection            

            $.connection.hub.start(function () { chat.join(projectId, userId, userName); }).done(function () {
                alert("Connected!");
                var myClientId = $.connection.hub.id;
                setCookie("srConnectionid", myClientId, 1);

            });


            function setCookie(cName, value, exdays) {

              try{

                var exdate = new Date();
                exdate.setDate(exdate.getDate() + exdays);

                var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate);
                document.cookie = cName + "=" + c_value;

              }

             catch(err){

             alert(err.Description);             

             }
       }   

そして、このように IConnectionIdFactory を継承するクラスを作成しました

  public class MyConnectionFactory : IConnectionIdFactory
  {
    public string CreateConnectionId(IRequest request)
    {
        if (request.Cookies["srconnectionid"] != null)
        {
            return request.Cookies["srconnectionid"];
        }

        return Guid.NewGuid().ToString();
    }
  }

上記のクラスを Application_start() に以下のように登録しました

protected void Application_Start()
    {

        AspNetHost.DependencyResolver.Register(typeof(IConnectionIdFactory), () => new MyConnectionFactory());     
        AreaRegistration.RegisterAllAreas(); 
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

私の問題は、CreateConnectionId リクエスト内で MyConnectionFactory クラスが呼び出されるたびに発生することです。Cookies["srconnectionid"] は毎回 null であるため、ユーザーには毎回新しい接続 ID が割り当てられます。接続 ID を維持するのに役立つリンクが 1 つしか見つかりませんでした。 //www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances

誰でも私の問題を解決する方法を提案できますか、または同じユーザーの接続 ID を再利用する他の方法はありますか?

Cookie の値はクライアント側で設定されます。私はこれを 2 日間試しています。とても役に立ちます。

前もって感謝します

4

2 に答える 2

1

Cookie の有効期限は UTC 文字列にする必要があります (これを行っていないため、サーバーは Cookie を期限切れとして扱っている可能性があります)。コードを次のように変更します。

var cValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toUTCString());
document.cookie = cName + "=" + cValue;

または、Cookie の設定にjQuery Cookie プラグインを使用することもできます。

アップデート

また、提供したコードでは Cookie の名前が矛盾しています。「userConnectionid」という名前の Cookie を設定していますが、「srconnectionid」という名前でアクセスしようとしています。そこでスペルミスをしていないか確認してください。

于 2012-03-01T15:22:24.087 に答える
0

特にページがサブディレクトリにある場合は、Cookieのパスを設定してください。私は同様のアプローチに従っており、Cookieパスがrootに設定されている場合、すべてが機能します。

于 2012-10-05T16:00:55.790 に答える