如何为webSocket javascript设置cookie头?

如何为webSocket javascript设置cookie头?,javascript,web-services,cookies,websocket,kerberos,Javascript,Web Services,Cookies,Websocket,Kerberos,我试图用kerberos身份验证打开服务器的websocket,握手时出错(错误代码:400); 我发现不可能通过web套接字发送凭据,我要做的是通过web套接字cookie设置用户名和密码,服务器将读取它们。 那么如何为web套接字设置cookie呢? 谢谢,您可以使用document.cookie=xxxx为webSocket连接设置cookie,方法与设置常规cookie相同。所有webSocket连接都以HTTP请求(上面有一个升级头)开始,并且您要连接的域的Cookie将与打开webS

我试图用kerberos身份验证打开服务器的websocket,握手时出错(错误代码:400); 我发现不可能通过web套接字发送凭据,我要做的是通过web套接字cookie设置用户名和密码,服务器将读取它们。 那么如何为web套接字设置cookie呢?
谢谢,

您可以使用
document.cookie=xxxx
为webSocket连接设置cookie,方法与设置常规cookie相同。所有webSocket连接都以HTTP请求(上面有一个升级头)开始,并且您要连接的域的Cookie将与打开webSocket的初始HTTP请求一起发送


因此,只要您将webSocket连接到与您的网页相同的域,那么您就可以为该网页设置一个cookie,它将与webSocket连接请求一起发送。与其他cookie一样,您可以使用所述的
document.cookie
设置cookie。

这取决于浏览器。如果Cookie随初始HTTP请求到达以启动WebSocket连接,您可以实现对Cookie的处理,但如果您不能要求您的用户使用Safari,它发送带有WebSocket打开请求的Cookie,而不是Chrome,它不会,您可能需要实现一种机制,以便客户端在频带内发送会话标识符

实现这一点的一种简单方法是,客户机代码将会话标识符作为第一条消息发送,以响应
open
事件,服务器代码将第一条传入消息的内容解释为会话cookie,以设置适当的权限上下文(或者,如果cookie未知或不授予其承载者任何特权,则关闭连接)

或者,如果您的WebSocket协议具有某种结构化的消息基础结构,则可以定义用于将会话cookie传递给服务器的特定消息类型,以及服务器的匹配响应类型,以让客户端知道它对cookie的看法


在URI参数中传递会话cookie可能很容易,如
ws://example.com/service?session=123456
。这在原型设计中是足够的,但在生产中可能不建议这样做,因为会话cookie通常应被视为比处理从web请求的URI列表更敏感服务器。以这种方式传递会话cookie可能在短期内起作用,但可能会通过(比如)粗心的分析技术增加其意外暴露的风险。在某些其他情况下,通过在请求正文中传递敏感标识符(例如,作为所谓的
POST
参数)可以缓解此问题,但WebSocket打开请求不能有非空的正文。

我正在尝试使用document.cookie添加cookie,cookie在http请求中发送,但在尝试打开web套接字时(wss://...)我在请求头中看不到cookies@jfriend00@ibrahimnoureddine-您是否将您的webSocket连接到与网页相同的协议、域和端口?这是document.cookie中的cookie将被发送到的唯一位置。我们可能需要查看设置cookie和连接webSocket的代码,并查看Ls是页面和webSocket连接的一部分,用于进一步建议。没有代码的问题对我们来说很难调试。http请求:var xurl=”htttps://servername/piwebapi/streamsets/“+elementwebid+”/value”;GetJsonContent(xurl,(函数(子元素))..websocket请求:tempstring='wss://'+ServerName+'/piwebapi/streamset/channel?'@jfriend00@ibrahimnoureddine-请使用“编辑”链接,将代码放入您的问题中,然后发布一条评论,提醒我们您的编辑。多行代码在评论中不可读,无论如何,您的代码属于您的问题,阅读问题时所有人都可以看到。此外,我不知道您所说的“http请求”是什么意思。你说的是网页URL吗?还是别的什么?不,不是网页URL,第一个http请求是从AF数据库检索数据,web套接字的目的是让我不断更新新值。因此,第一个请求在标题中包含我的cookie,但在尝试打开web套接字时,它不包含我的cookie(cookie的目的是传递用户名和密码);@jfriend00