2 qq 31531483 qq_31531483 于 2016.03.16 15:17 提问

WebSocket获取的登录用户的信息

WebSocket怎么获取放在session里的登录用户的信息?求指教

7个回答

u011489205
u011489205   2016.03.17 11:21
已采纳

你上面提到的其实并不是乱码,而是urlencode编码之后的字符序列。你可以使用以下代码进行解码:

 String decodeStr = URLDecoder.decode(queryStr, "utf-8");

解码之后再做分析。

qq_31531483
qq_31531483 非常谢谢你,已经完美解决了!
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.16 19:28

这个需要客户端服务器端配合,服务器端有用户信息,客户端去连接获取。用你使用的语言+web socket去google,就会有代码的。

u011489205
u011489205   2016.03.16 19:34

1.首先你要区分是HttpSession还是Websocket会话session。
2.HttpSession这里不讲,我想说的Websocket的会话session。你可以在websocket服务器端维护一个
Map map = new HashMap();
其中Session可以在每个Websocket通信的回调函数中作为参数传入,会话会帮你维护这整个session,会话期间整个session不会改变。UserInfo可以通过传入的Session为key操作
map获取。因为是全局的map,所以在访问的时候一定要注意互斥访问,记得加锁哦。

u011489205
u011489205 回复一米阳光三寸暖: 使用String name = URLDecoder.decode(queryStr, "utf-8");解码queryString()获取的字符串
接近 2 年之前 回复
u011489205
u011489205 回复一米阳光三寸暖: 看我下面推荐的方案
接近 2 年之前 回复
qq_31531483
qq_31531483 可是我应该怎么在打开管道的时候把前台的用户信息传过来呢?打开的时候不是会触发onopen事件吗?然后我想把前台登录的用户传到onopen事件里作处理,我在建立握手连接的时候直接在路径后面加的“?”传值,去onopen方法参数的session里取,session.getQueryString,得到了一个字符串,如果用户名是英文可以,但是如果是中文就会是乱码,好像也不是乱码,就像是把用户名加密了一样,类似于这种:%C%E%T... 。不知道是什么的原因
接近 2 年之前 回复
u011489205
u011489205   2016.03.16 19:36

"Map map = new HashMap();"

u011489205
u011489205   2016.03.16 19:39
 Map<Session, UserInfo> connectmap = new HashMap<>();//session 是Websocket会话,UserInfo 是你自己的用户信息bean,当然也可以是map
u011489205
u011489205   2016.03.17 11:14

在服务器类上加上一下注解

 @ServerEndpoint(value = "/websocket/signalmonitor/{nickname}")

start方法入参格式如下:

 @OnOpen
    public void start(@PathParam("nickname")String nickname, Session session) {
    }

前段调用参数如下:

 Chat.initialize = function() {
        if (window.location.protocol == 'http:') {
            Chat.connect('ws://' + window.location.host
                    + '/websocket/websocket/signalmonitor/tony');
        } else {
            Chat.connect('wss://' + window.location.host
                    + '/websocket/websocket/signalmonitor/tony');
        }
    };

基于路径的参数传递,服务器接受到的就是tony。

u011489205
u011489205 回复一米阳光三寸暖: 那得看你前台传递的参数是什么编码呀,有可能是ISO-8859-1呢或者gbk,视情况改变编解码参数
一年多之前 回复
qq_31531483
qq_31531483 这个我之前试过了,中文还是显示乱码
一年多之前 回复
xiumu_
xiumu_   2016.03.17 20:59

Websocket里面通过注解以及方法也是可以获取到http协议的session的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!