如何跨页面处理自定义标记

时间:2012-05-08 21:07:53

标签: c# javascript asp.net

我有一个自定义登录,返回一个加密的令牌,表示用户已登录。此令牌通过QueryString传递到另一个页面(Dash.aspx)。

Dash.aspx从QueryString获取令牌并将其发布到页面上的隐藏字段。 Javascript读取该值并将其保存在内存中。然后,该令牌用于进行Web服务调用。当这些调用完成后,将返回一个新的Token值,并且javascript会存储该值(替换旧值)。

我希望在登录后添加新页面以供访问。这些页面需要传递给它们的有效令牌。用户将从Dash.aspx移动到这些新页面之一并返回(因此只是主页顶部的几个不同链接)

我不喜欢通过QueryString传递令牌。而且我不确定如何在更改页面的位置更新令牌。 我想避免使用Session存储并尽可能传递令牌

如何更谨慎地传递我的令牌,并确保它始终通过最新值?

我意识到这是一个相当广泛的问题,但我不知所措。我觉得可能有一些预先构建的想法可以解决这个问题,我只是不知道使用它的方法或使用方法。

由于

更新

因此要求提供一个例子:

第1步:用户登录 - > zholen / zholen123

  • 调用服务以验证用户名和密码 - >返回令牌('ABC')
  • 重定向到Page Dash.aspx?token = ABC

第2步:Dash.aspx从查询字符串中抓取令牌并分配到页面上的隐藏字段

  • Javascript对象从隐藏字段中抓取令牌并在内部存储
  • JS Object对各种服务进行多次异步调用,每次返回服务 新的更新令牌,内部令牌更新为新值(令牌每30分钟过期

所需的新步骤

第3步:从Dash.aspx移至Account.aspx

  • Account.aspx需要加载有效令牌
  • 调用更多服务并更改令牌

步骤4:使用最新标记

从Account移至Dash.aspx

服务调用可以通过Web服务(asmx)或通过页面方法进行,具体取决于操作是否需要数据返回(asmx)或html返回(页面方法 - >表格预填充数据)或者页面加载

基于Cookie的建议,我认为在C#end上的这些调用期间可以使用新的令牌值重置cookie,假设我可以从ASMX做那种事情并且整个异步事情不会引起问题。

此外,我可以使内部存储最新令牌的JS对象将该值放回隐藏字段,如果这有助于从C#端访问它。

1 个答案:

答案 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