我有一个自定义登录,返回一个加密的令牌,表示用户已登录。此令牌通过QueryString传递到另一个页面(Dash.aspx)。
Dash.aspx从QueryString获取令牌并将其发布到页面上的隐藏字段。 Javascript读取该值并将其保存在内存中。然后,该令牌用于进行Web服务调用。当这些调用完成后,将返回一个新的Token值,并且javascript会存储该值(替换旧值)。
我希望在登录后添加新页面以供访问。这些页面需要传递给它们的有效令牌。用户将从Dash.aspx移动到这些新页面之一并返回(因此只是主页顶部的几个不同链接)
我不喜欢通过QueryString传递令牌。而且我不确定如何在更改页面的位置更新令牌。 我想避免使用Session存储并尽可能传递令牌
如何更谨慎地传递我的令牌,并确保它始终通过最新值?
我意识到这是一个相当广泛的问题,但我不知所措。我觉得可能有一些预先构建的想法可以解决这个问题,我只是不知道使用它的方法或使用方法。
由于
更新
因此要求提供一个例子:
第1步:用户登录 - > zholen / zholen123
第2步:Dash.aspx从查询字符串中抓取令牌并分配到页面上的隐藏字段
所需的新步骤
第3步:从Dash.aspx移至Account.aspx
步骤4:使用最新标记
从Account移至Dash.aspx服务调用可以通过Web服务(asmx)或通过页面方法进行,具体取决于操作是否需要数据返回(asmx)或html返回(页面方法 - >表格预填充数据)或者页面加载
基于Cookie的建议,我认为在C#end上的这些调用期间可以使用新的令牌值重置cookie,假设我可以从ASMX做那种事情并且整个异步事情不会引起问题。
此外,我可以使内部存储最新令牌的JS对象将该值放回隐藏字段,如果这有助于从C#端访问它。
答案 0 :(得分:1)
您可以使用Cookie ...您可能希望使用中间加密,因为可以从外部读取Cookie。
//c#
HttpCookie cookie = new HttpCookie("myTokenCookie");
cookie.Value = tokenString;
Response.SetCookie(cookie);
// then get it back later
s = Request.Cookies["myTokenCookie"].Value;
// then you could write it into a hidden input for retrieval in JS