diff --git a/coco/interactive.py b/coco/interactive.py
index 8deb899c461f61c5f5334e19c740dfb3f2463879..0a5781e9612da171379bbfd42c959969c029300c 100644
--- a/coco/interactive.py
+++ b/coco/interactive.py
@@ -129,7 +129,6 @@ class InteractiveServer:
                 input_data.append(data)
 
     def dispatch(self, opt):
-        print(repr(opt))
         if opt is None:
             return self._sentinel
         elif opt.startswith("/"):
@@ -183,7 +182,7 @@ class InteractiveServer:
             self.get_user_asset_groups()
 
         if len(self.asset_groups) == 0:
-            self.client.send(warning(_("Nothing")))
+            self.client.send(warning(_("æ— ")))
             return
 
         fake_group = AssetGroup(name=_("Name"), assets_amount=_("Assets"), comment=_("Comment"))
@@ -197,11 +196,11 @@ class InteractiveServer:
         self.client.send(title(header.format(fake_group, "ID")))
         for index, group in enumerate(self.asset_groups, 1):
             self.client.send(wr(line.format(group, index)))
-        self.client.send(wr(_("Total: {}").format(len(self.asset_groups)), before=1))
+        self.client.send(wr(_("总共: {}").format(len(self.asset_groups)), before=1))
 
     def display_group_assets(self, _id):
         if _id > len(self.asset_groups) or _id <= 0:
-            self.client.send(wr(warning("No matched group, select again")))
+            self.client.send(wr(warning("没有匹配分组,请重新输入")))
             self.display_asset_groups()
             return
 
@@ -223,7 +222,7 @@ class InteractiveServer:
         self.client.send(wr(title(header.format(fake_asset, "ID"))))
         for index, asset in enumerate(self.search_result, 1):
             self.client.send(wr(line.format(asset, index)))
-        self.client.send(wr(_("Total: {} Matched: {}").format(
+        self.client.send(wr(_("总共: {} 匹配: {}").format(
             len(self.assets), len(self.search_result)), before=1)
         )
 
@@ -265,7 +264,7 @@ class InteractiveServer:
             return None
 
         while True:
-            self.client.send(wr(_("Choose one to login: "), after=1))
+            self.client.send(wr(_("选择一个登陆: "), after=1))
             self.display_system_users(system_users)
             opt = self.get_option("ID> ")
             if opt.isdigit() and len(system_users) > int(opt):
@@ -284,14 +283,18 @@ class InteractiveServer:
     def search_and_proxy(self, opt):
         self.search_assets(opt)
         if self.search_result and len(self.search_result) == 1:
-            self.proxy(self.search_result[0])
+            asset = self.search_result[0]
+            if asset.platform == "Windows":
+                self.client.send(warning(_("终端不支持登录windows, 请使用web terminal访问")))
+                return
+            self.proxy(asset)
         else:
             self.display_search_result()
 
     def proxy(self, asset):
         system_user = self.choose_system_user(asset.system_users_granted)
         if system_user is None:
-            self.client.send(_("No user"))
+            self.client.send(_("没有系统用户"))
             return
         forwarder = ProxyServer(self.app, self.client)
         forwarder.proxy(asset, system_user)
diff --git a/coco/proxy.py b/coco/proxy.py
index 5ebe4130f3bec3a3a324b16cf6fe37609413f3a8..d180c3aa3e78d9dd1d023e1d495f996131261474 100644
--- a/coco/proxy.py
+++ b/coco/proxy.py
@@ -92,7 +92,7 @@ class ProxyServer:
                 timeout=TIMEOUT, compress=True, auth_timeout=10,
                 look_for_keys=False
             )
-        except (paramiko.AuthenticationException, paramiko.BadAuthenticationType):
+        except (paramiko.AuthenticationException, paramiko.BadAuthenticationType, SSHException):
             admins = self.app.config['ADMINS'] or 'administrator'
             self.client.send(warning(wr(
                 "Authenticate with server failed, contact {}".format(admins),
diff --git a/coco/session.py b/coco/session.py
index 3b333ad6a362a9401f8608e0d15c67fbf4ac2e50..d5ccd4e088f7b3c39a8d1b30d904a56605bd6d33 100644
--- a/coco/session.py
+++ b/coco/session.py
@@ -28,6 +28,7 @@ class Session:
         self._command_recorder = command_recorder
         self._replay_recorder = replay_recorder
         self.server.set_session(self)
+        self.date_last_active = datetime.datetime.utcnow()
 
     def add_watcher(self, watcher, silent=False):
         """
@@ -129,6 +130,8 @@ class Session:
                         logger.info(msg)
                         self.close()
                         break
+
+                    self.date_last_active = datetime.datetime.utcnow()
                     for watcher in [self.client] + self._watchers + self._sharers:
                         watcher.send(data)
                 elif sock == self.client:
@@ -171,6 +174,7 @@ class Session:
             "login_from": "ST",
             "remote_addr": self.client.addr[0],
             "is_finished": True if self.stop_evt.is_set() else False,
+            "date_last_active": self.date_last_active.strftime("%Y-%m-%d %H:%M:%S") + " +0000",
             "date_start": self.date_created.strftime("%Y-%m-%d %H:%M:%S") + " +0000",
             "date_end": self.date_end.strftime("%Y-%m-%d %H:%M:%S") + " +0000" if self.date_end else None
         }
diff --git a/coco/utils.py b/coco/utils.py
index f13363318abb3d14c7cc983ab9bd7d7e0a7c4316..f3b0b71251b89179925ad568bb4585be6130b78a 100644
--- a/coco/utils.py
+++ b/coco/utils.py
@@ -289,4 +289,17 @@ def get_logger(file_name):
     return logging.getLogger('coco.'+file_name)
 
 
+zh_pattern = re.compile(u'[\u4e00-\u9fa5]+')
+
+
+def len_display(s):
+    length = 0
+    for i in s:
+        if zh_pattern.match(i):
+            length += 2
+        else:
+            length += 1
+    return length
+
+
 ugettext = _gettext()
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index fd3278d1d44bfc11908b88f078925d11d529a62c..3771f548ff5ed04fd64ec4c61d01f4e97cae4b87 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -30,5 +30,5 @@ tornado==4.5.2
 urllib3==1.22
 wcwidth==0.1.7
 werkzeug==0.12.2
-jumpserver-python-sdk==0.0.30
+jumpserver-python-sdk==0.0.31
 jms-es-sdk