[md]问个C#问题,谢谢大家:
# 关键代码:
类中UserName属性
```
private string UserName
{
// 注意:实测发现,对于每一个连接,一旦次访问了给了cookie["USERNAME"],后面不会再次得到新的,这正是问题
get
{
var userName = Context.RequestCookies["USERNAME"];
return userName == null ? "" : HttpUtility.UrlDecode(userName.Value);
}
}
```
# 描述:
在A方法中使用了UserName,而A方法由客户端js发起请求,但在发起请求前我改了cookie["USERNAME"],那么此时按照属性即方法,应该会再调用一次get,然后获取修改后的cookie["USERNAME"],然而实测发现还是上次的cookie,并没有再次去get{}重新获取cookie
# 举例:
次访问GroupChat.html,此时js自动生成了默认用户名(默认-23),
并将其cookie["USERNAME"]="默认-23",此时传给服务端,实测此时正常,用户名确实为"默认-23"。
然后我再手动更改cookie["USERNAME"]为“张三”,再次发送消息,然而调试发现虽然改变了浏览器的cookie["USERNAME"],但服务端发送者用户名UserName依然为"默认-23"
# 本人猜测:
因为websocket不会自动将客户端cookie发给服务端,那么只有在次建立会话,get访问时取到cookie,并且Context.RequestCookies也是在次赋值后就会一直保留值,才能导致后面ws通信,全部RequestCookies["USERNAME"]还是为次请求时cookie。
这么说Hub中的Context与一般ashx,aspx中的Context不一样,不会因为每一次的请求而重新生成Context
# 源码:
其中的SignalRGroupChatDemo
链接: https://pan.baidu.com/s/18NaXyo9ofsu90Iu9JORfyw 密码: cmbd[/md]