c# - 检查身份验证票过期而不影响它

标签 c# asp.net forms-authentication formsauthenticationticket

我正在尝试实现一个 Web 应用程序项目,我的网页可以在其中使用 AJAX 检查服务器的身份验证票证到期日期/时间。

我正在使用带有 slidingExpiration 的表单例份验证。

我遇到的问题是我不知道如何在不重置的情况下检查该值。我创建了一个简单的页面 - CheckExpiration.aspx - 下面是背后的代码:

  private class AjaxResponse
  {
     public bool success;
     public string message;
     public string expirationDateTime;
     public string secondsRemaining;
     public string issueDate;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
     AjaxResponse ar = new AjaxResponse();
     JavaScriptSerializer js = new JavaScriptSerializer();

     if (HttpContext.Current.User.Identity.IsAuthenticated)
     {
        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
        string expiration = id.Ticket.Expiration.ToString();

        TimeSpan timeRemaining = id.Ticket.Expiration - DateTime.Now;

        ar.success = true;
        ar.expirationDateTime = expiration;
        ar.issueDate = id.Ticket.IssueDate.ToString();
        ar.secondsRemaining = timeRemaining.Minutes.ToString() + ":" + timeRemaining.Seconds.ToString();
     }
     else
     {
        ar.success = false;
        ar.message = "User not authenticated";
     }

     string output = js.Serialize(ar);
     Response.Write(js.Serialize(ar));

  }

我每秒使用 ajax 从我的应用程序的母版页调用此页面。在身份验证过期过半时,过期将被重置。

如何防止这种行为?我可以在请求的 header 中做些什么吗?

最佳答案

为什么不将到期时间存储为您自己计算的 session 变量?您只需要获取一次 id.Ticket.Expiration 的值。然后每次调用,从服务器获取值并相应地增加它,并将它存储回服务器。

http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.85%29.aspx

伪代码:

if(!Session.KeyExists("Expiration"))
{
  Session["Expiration"] = id.Ticket.Expiration;
}

Session["TimeRemaining"] = Session["Expiration"] - DateTime.Now;

// get all ajaxy here

关于c# - 检查身份验证票过期而不影响它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824550/

相关文章:

c# - 使用具有相同结构的两个不同表

c# - 为什么我的 C# 快速排序实现比 List<T>.Sort 慢得多

c# - 如何在 GridView 中获取隐藏字段的值?

c# - 调用 Wcf 服务被拒绝?这是web配置的问题吗?

c# - FormsAuthentication.SetAuthCookie() 是否需要重定向?

C#Activex 事件不触发

c# - HttpWebrequest 失败,yande.re(以及 IE 和 curl)["The request was aborted: Could not create SSL/TLS secure channel."]

c# - 如何获取 ASP.NET 应用程序的根文件夹

asp.net - 使用 DBFactory 和 Oracle 存储过程 sys ref 游标返回数据集

asp.net-mvc - ASP.NET MVC 表单例份验证 + 授权属性 + 简单角色