绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
SignalR---Hub类中属性获取cookie问题
2019-09-17 10:05:20

[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]

分享好友

分享这个小栈给你的朋友们,一起进步吧。

应用开发
创建时间:2020-06-17 15:31:04
应用软件开发是指使用程序语言C#、java、 c++、vb等语言编写,主要是用于商业、生活应用的软件的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~