【发布时间】:2012-10-01 05:33:33
【问题描述】:
我正在尝试实现一个 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 从应用程序的主页面调用此页面。在身份验证过期的中间点之后,过期将被重置。
如何防止这种行为?我可以在请求的标头中做些什么吗?
【问题讨论】:
-
检查这是不是类似的东西或者你的问题是不同的?...dotnetmonster.com/Uwe/Forum.aspx/asp-net-security/2316/…
-
我认为您链接到的这篇文章是有人对 .net 的默认行为有问题。我不在乎这种行为,因为如果您保持空闲状态,那么在您尝试做某事之前,您不会知道您已在服务器级别注销。我正在尝试做一些对用户更友好的东西,在那里你会被告知你即将被注销。我也不想只依赖进入页面时设置的 javascript 计时器,因为可以从另一个选项卡刷新身份验证。
标签: c# asp.net forms-authentication formsauthenticationticket