将特定数据转换为HTTP GET请求
我试图实现一个身份验证机制,其中每个浏览器选项卡可能以不同的用户身份登录。
这是这个系统的规则:
我到目前为止所尝试的是:
对私有和公共令牌使用cookies
:这不起作用,因为服务器无法知道要查找哪个cookie。如果用户从选项卡中单击链接,请求会将所有Cookie发送到所有选项卡,并且服务器无法知道链接上点击了哪一个。
在sessionStorage
存储专用标记:这不起作用,因为当用户单击链接时,无法指定应与HTTP GET请求一起发送的自定义标头。
使用AJAX请求页面,然后使用数据URI导航到内存中的页面:出于安全原因,Internet Explorer不允许将HTML URI内容用于HTML内容。 请参阅http://msdn.microsoft.com/en-us/library/cc848897%28v=vs.85%29.aspx
使用<form method="get" enctype="multipart/form-data">
并使用隐藏字段传递令牌:enctype =“multipart / form-data”仅支持POST。
使用<form method="post" enctype="multipart/form-data">
并使用隐藏字段传递令牌:理论上,这应该可行,但现在如果用户使用后退/前进按钮。
使用AJAX请求页面,然后使用document.open(); document.write(); document.close()
重写当前页面document.open(); document.write(); document.close()
document.open(); document.write(); document.close()
document.open(); document.write(); document.close()
。 我尝试了https://stackoverflow.com/a/4404659/14731和http://forums.mozillazine.org/viewtopic.php?p=5767285&sid=d6a5a2e8e311598cdbad124e277e0f52#p5767285,并且在这两种情况下新的<head>
块永远不会被执行。
有任何想法吗?
好的,在经历了许多不同的迭代之后,下面是我们结束的实现:
变量
publicToken
, nextTabId
。 privateToken
, tabId
。 publicToken,privateToken
publicToken
是所有选项卡上最后一次登录操作返回的令牌。 privateToken
是当前标签上次登录操作返回的标记。 tabId
tabId
的标记唯一标识。 nextTabId
是一个可通过所有选项卡访问的数字。 nextTabId
创建一个新的nextTabId
并递增其值。 tabId
的值可以是“com.company.Tab X
”,其中X
是nextTabId
返回的nextTabId
。 登录/注销
privateToken
和publicToken
使用由服务器返回的认证令牌覆盖。 privateToken
和publicToken
在浏览器端,并privateToken
在服务器端。 我们不会删除服务器端的publicToken
。 privateToken
所有标签也会被注销。 任何使用不同令牌的选项卡都不会受到影响。 privateToken
标签? 当您在新窗口或选项卡中打开链接时,它会继承父标签的privateToken
。 publicToken
在服务器上,以注销标签privateToken
X, publicToken
Y就应该引起标签privateToken
y以得到注销(这是不可取的)。 在页面加载
tabId
查询参数附加到该URL。 参数值等于tabId
的值。 tabId
URL参数,以便用户可以与他们的朋友共享链接( tabId
是用户特定的并且不能共享)。 tabId
cookie(更多信息在下面)。 点击链接时
tabId
cookie并遵循链接。 tabId
的值,并且其值等于privateToken
的值 当服务器收到请求时
tabId
参数,则将浏览器重定向到GetTabId.html?referer=X
,其中X
是当前URL。 tabId
存在但认证令牌无效或过期,则将浏览器重定向到登录屏幕。 GetTabId.html
privateToken
,复制publicToken
到privateToken
。 privateToken
和publicToken
是不确定的,重定向到登录页面。 referer
的URL参数,该参数指示成功时重定向的位置。 privateToken
,则将tabId
参数附加到referer
页面并将其重定向回来。 window.location.replace()
从浏览器历史记录中删除GetTabId.html
。 为什么我们要继续删除/添加Cookie?
tabId
cookie,那么每次标签发出请求时,所有其他标签的cookie也会发送。 已知的问题
tabId
。 因此,它获取重定向到GetTabId.html
而不是实际页面的页面的源代码。 GetTabId.html
页面重新加载(客户端重定向到GetTabId.html
并返回到原始页面)。 对长期实施细节抱歉,但我找不到更简单/更短的解决方案。
链接地址: http://www.djcxy.com/p/21993.html