提醒:本文最后更新于 2881 天前,文中所描述的信息可能已发生改变,请仔细核实。
最近一个项目,Chatbox(博客右下角),就遇到这个问题。
所以写了个js函数解决这个问题。
function GetCookieDomain() { var host = location.hostname; var ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/; if (ip.test(host) === true || host === 'localhost') return host; var regex = /([^]*).*/; var match = host.match(regex); if (typeof match !== "undefined" && null !== match) host = match[1]; if (typeof host !== "undefined" && null !== host) { var strAry = host.split("."); if (strAry.length > 1) { host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1]; } } return '.' + host; }
支持本地环境(仅判断localhost)、host为ip地址、中文域名、常规域名。如下所示:
输入 | 输出 |
---|---|
127.0.0.1 | 127.0.0.1 |
192.168.1.1 | 192.168.1.1 |
localhost | localhost |
255.255.255.256 | .255.256 |
kn007.net | .kn007.net |
info.kn007.net | .kn007.net |
a.b.c.d.e.f.1.2.3.4.5.kn007.net | .kn007.net |
中文.中国 | .中文.中国 |
在此.祝你.春节.快乐 | .春节.快乐 |
调用很简单,写了个示例:
document.cookie = cname + "=" + cvalue + "; expires=" + expires + "; domain=" + GetCookieDomain() + "; path=/";
说解决跨域,其实只是解决子域和主域的cookie问题。
这项目是朋友ArchiTech创建的,项目地址传送门,欢迎大家Fork和PR。
当练习nodejs和js了。。。当然最重要的是写中英文档,练手。
其中得到比较重要的启发是:Websocket最好运行在SSL状态,快,而且同端口完成连接握手通讯。
通过80反代后端应用端口,容易出现:
failed: Error during WebSocket handshake: Unexpected response code: 400
资料:
This is almost always due to not using https (SSL).
Websocket over plain http is vulnerable to proxies in the middle (often transparent) operating at the http layer breaking the connection.
The only way to avoid this is to use SSL all the time - this gives websocket the best chance of working.
More info at subsection 4.2.1 of the WebSockets RFC 6455.
[Test]Scheduled post via WordPress 4.2.2 from kn007's blog.
转载请注明转自:kn007的个人博客的《js创建cookie时获取一级域名设置domain解决跨域问题》
过年好。
@wu先生: 同乐!
感觉你这里的Chatbox比较好看啊,我那儿好像字体太大了的缘故。。╮(╯_╰)╭
@ArchiTech: 我这个是随主题字体的~
测试中……
@王琪亮: 欢迎,我今天早上还编辑了该代码。你试试
@kn007: 刚才我测试了一下: 开着cloud flare就出现我登陆了看不见另一个用户的情况。
@王琪亮: 啥米意思?
@kn007: 关了也不正常。
具体为输入token之后,一直Status: Waiting..
@王琪亮: http?看下console输出什么错误?我过去你那没看到chatbox。话说比较大可能是因为主程序崩溃了?
@kn007: 刚才看了一下。因为我在嵌入代码的时候,忘记把那个div嵌入了。
statuswaiting是因为:开了cloudflare CDN之后cloudflare不支持Web socket,后端一直是443SSL但是无效。
现在已经好了。
@王琪亮: 哦,那就ok了。我去看看
@王琪亮: 看了下,似乎还没完全使用Wordpress的新版本。。
@王琪亮: 解决了?那我关掉你在github那个issue喽?
@ArchiTech: 好的。
@王琪亮: 你现在环境是怎么部署的?
@王琪亮: 你可以更新下github代码,先用主线试试,没问题再切到wordpress
@王琪亮: 你的意思是你本身是80,通过cdn加速成443,对么?
呵呵,有标题党之嫌。。
这是获取cookie的实验评论。
@王琪亮: 建议更新到最新版本。以我的Fork为准, https://github.com/kn007/Chatbox 。你可以把里面的wordpress作为patch来用。那是我根据实际来的。主线版本也是在我这测试后,互相merge的。
@王琪亮: 不用Wordpress的话,直接使用主线版本,就ok了
@王琪亮: 如果你使用Typecho,记得把Wordpress的cookie监控项更改为对应的即可~
获取一级域名的js有点bug,例如:xxxx.com.cn的域名获取不准确~~
@netsnower: 唔,确实没考虑这种域名。也不会再fix这段代码了