signalR поддержание идентификаторов подключения пользователя - PullRequest
4 голосов
/ 01 марта 2012

Я пытаюсь сохранить идентификатор соединения для пользователя, я имею в виду, даже если он обновляет страницу, он получает тот же connectionid

Это то, что я мог сделать до сих пор

часть JavaScript

// 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);
    }

Моя проблема - каждый раз, когда класс MyConnectionFactory вызывается внутри CreateConnectionId request.Cookies ["srconnectionid"] каждый раз имеет значение null, поэтому пользователю каждый раз назначается новый connectionid. Я мог найти только одну ссылку, которая помогла мне поддерживать идентификаторы соединений. Это http://www.kevgriffin.com/maintaining-signalr-connectionids-across-page-instances

Может кто-нибудь подсказать, как исправить мою проблему, или есть какой-то другой способ повторно использовать идентификатор соединения для того же пользователя ...?

Значение Cookie установлено на клиентской стороне. Я пробовал это в течение 2 дней. Это было бы очень полезно

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Дата истечения срока действия cookie должна быть строкой UTC (вы этого не делаете, поэтому, скорее всего, сервер рассматривает ваш файл cookie как просроченный).Измените свой код следующим образом:

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

Или вы можете просто использовать плагин jQuery Cookie для установки cookie.

ОБНОВЛЕНИЕ

Также имяcookie не входит в код, который вы предоставили.Вы устанавливаете cookie с именем 'userConnectionid', но пытаетесь получить доступ с именем 'srconnectionid'.Пожалуйста, проверьте, не допустили ли там орфографическую ошибку.

0 голосов
/ 05 октября 2012

Убедитесь, что вы указали путь к cookie, особенно если страница находится в подкаталоге. Я придерживаюсь аналогичного подхода, и когда путь к cookie установлен на root, все это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...