C# 如何跨页面处理自定义令牌

C# 如何跨页面处理自定义令牌,c#,javascript,asp.net,C#,Javascript,Asp.net,我有一个自定义登录,它返回一个加密的令牌,表示用户已登录。此令牌通过QueryString传递到另一个页面(Dash.aspx) Dash.aspx从查询字符串中获取令牌,并将其发布到页面上的隐藏字段中。 Javascript读取该值并将其保存在内存中。然后使用该令牌进行web服务调用。当这些调用完成时,返回一个新的令牌值,javascript存储该值(替换旧值) 我想在登录后添加新页面以供访问。这些页面将需要传递给它们的有效令牌。用户可以从Dash.aspx移动到这些新页面中的一个页面,然后再

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

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

我想在登录后添加新页面以供访问。这些页面将需要传递给它们的有效令牌。用户可以从Dash.aspx移动到这些新页面中的一个页面,然后再返回(因此在母版页顶部只需几个不同的链接)

我不喜欢通过QueryString传递令牌。我不知道如何在页面更改时保持令牌的更新。 如果可能的话,我希望避免使用会话来存储和传递令牌

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

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

谢谢

更新

因此,我们需要一个例子:

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

  • 调用服务以验证用户名和密码->返回令牌('ABC')
  • 重定向到页面Dash.aspx?token=ABC
步骤2:Dash.aspx从querystring中获取令牌并分配给页面上的隐藏字段

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

期望的新步骤

步骤3:从Dash.aspx移动到Account.aspx

  • Account.aspx需要有效的令牌才能加载
  • 呼叫更多服务并更改令牌
步骤4:使用最新令牌从帐户移动到Dash.aspx


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

基于cookie的建议,我认为在C#end上进行这些调用时,可以使用新的令牌值重置cookie,假设我可以从ASMX执行此类操作,并且整个操作的异步不会引起问题


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

您可以使用cookies。。。您可能希望使用中间加密,因为cookies可以从外部读取

        //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

虽然OP中没有那么清楚,但它就像javascript调用服务一样,此时必须更改cookie。您如何处理客户端的cookie更改?您也可以用javascript设置cookie,尽管代码有点冗长。为了适应javascript更改cookie:由于这是一个ASP网站,似乎如果我在页面上放置一个带有ASP值的隐藏字段()然后,如果我通过javascript更新该值,我可以从后面访问最新的令牌。我无法理解您需要什么。你能举例说明吗?类似于“用户登录,他被重定向到查询字符串中带有标记的新页面,然后他点击……然后……javascript调用web服务和……”,cookies的想法很好,但您不能从javascript调用的.asxm WS设置它们。如果用户使用链接或键入URL从一个页面更改为另一个页面,则隐藏字段值将丢失,因此您可以放弃此选项。您是否使用此令牌将会话保持30分钟?如果是这样,为什么不使用ASP.NET的常规会话?答案解决了问题的C#端,但没有解决javascript端。您必须以与所有预期浏览器兼容的方式使用javascript设置cookie。