2017-05-30 8 views
0

私は今、私は、ユーザーが彼/彼女はチャットサイトを入力してユーザー名毎回入力する必要がいけないので、私は、ユーザー名を保存するためのsessionStorageを使用カントという問題を抱えているhttps://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/tutorial-getting-started-with-signalrSignalR jqueryののsessionStorage

から助けを借りてライブチャットを構築していウェブサイト上で

WebアプリケーションとsessionStorageで初めての作業です。

希望誰かが私を助けることができます:)

オンラインビュー:http://chat.kibshede.dk/Chat.aspx

私はそれでこれを持つクラスを持っている: 名前空間 { パブリッククラスChatHub SignalRChat:ハブ { 公共ボイド送信(文字列名、文字列メッセージ) { // broadcastMessageメソッドを呼び出してクライアントを更新します。 Clients.All.broadcastMessage(name、message); } } }

とOwinクラスで:

名前空間SignalRChat { パブリッククラス起動 { 公共ボイド構成(IAppBuilderアプリ) { //任意の接続またはハブワイヤアップとここに設定する必要があります app.MapSignalR();あなたはユーザーが設定するユーザ名を維持するためのlocalStorageにのsessionStorageを変更する必要が }} }

<!--Reference the autogenerated SignalR hub script. --> 
 
    <script src="signalr/hubs"></script> 
 
    <!--Add script to update the page and send messages.--> 
 
    <script type="text/javascript"> 
 
     $(function() { 
 
      // Declare a proxy to reference the hub. 
 
      var chat = $.connection.chatHub; 
 
      // Create a function that the hub can call to broadcast messages. 
 
      chat.client.broadcastMessage = function (name, message) { 
 
       // Html encode display name and message. 
 
       var encodedName = $('<div />').text(name).html(); 
 
       var encodedMsg = $('<div />').text(message).html(); 
 
       // Add the message to the page. 
 
       $('#discussion').append('<li><strong>' + encodedName 
 
        + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
 
      }; 
 

 
      if (sessionStorage.getItem('UserName') != '#ContentPlaceHolder1_displayname') { 
 
       // Get the user name and store it to prepend to messages. 
 
       var UserName = prompt('Enter your name:', '').toString(); 
 
       sessionStorage.setItem('UserName', UserName); 
 
      } 
 

 

 

 
      // Set initial focus to message input box. 
 
      $('#ContentPlaceHolder1_message').focus(); 
 

 
      // Start the connection. 
 
      $.connection.hub.start().done(function() { 
 
       $('#sendmessage').click(function() { 
 
        // Call the Send method on the hub. 
 
        chat.server.send(sessionStorage.getItem('UserName'), $('#ContentPlaceHolder1_message').val()); 
 
        // Clear text box and reset focus for next comment. 
 
        $('#ContentPlaceHolder1_message').val('').focus(); 
 
       }); 
 
      }); 
 
     }); 
 
    </script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
 
<asp:Panel ID="Panel_ChatContainer" CssClass="container" runat="server"> 
 

 
     <asp:Panel ID="Panel_ChatContainer_Chat" runat="server"> 
 
      <asp:TextBox ID="message" runat="server"></asp:TextBox> 
 
      <input type="button" id="sendmessage" value="Send" /> 
 
      <asp:Label ID="displayname" runat="server"></asp:Label> 
 
      <ul id="discussion"></ul> 
 
     </asp:Panel> 
 

 
    </asp:Panel>

+0

あなたのサイトにログインする必要はありますか?そうであれば、既存のセッションCookieを使用できます。 – MikeyM

+0

私はログインを使用しないでください:/ – Panzer

答えて

0

。 sessionStorageデータは、localStorageが持続する間にユーザがタブを閉じるまで持続します。

+0

しかし、私はユーザー名を保存するためにsessionstorageを使用できませんか? 私はログインのセッションをとにかく使用します – Panzer

+0

あなたのユーザーのセッションIDを記録するために使用しているオブジェクトに何を入力しても保存することができますが、必要に応じてユーザー名を入力する必要はありませんあなたはユーザーの終わりにとどまる何かを必要とします。 OnConnect/OnDisconnectのオーバーライド時にコードにブレークポイントを設定し、アプリをナビゲートする場合に呼び出される頻度を確認する必要があります。 – MikeyM

+0

私はベンがのsessionStorageにユーザー名を保存しようとしており、「もし」が、何らかの理由どこか別のセッションまたはのために に動作しない場合(sessionStorage.getItem(「ユーザー名」)!=「#のContentPlaceHolder1_displayname」){製 var UserName = prompt( 'あなたの名前を入力:'、 '').toString(); sessionStorage.setItem( 'UserName'、UserName); } – Panzer