各ループの終わりに6秒間スリープするループを持つ関数があります
Thread.Sleep(TimeSpan.FromSeconds(6));
これは10回ループします。つまり、関数は60秒間実行され、そのたびに6秒間一時停止します。
ループの開始時に認証テストがあります
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
return null;
}
したがって、最初に認証してから実行し、6秒間待機するたびに。
これは私の機能です:
while (counter < 10)
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
return null;
}
// doing stuff
Thread.Sleep(TimeSpan.FromSeconds(6));
counter++;
}
これで、ユーザーはその間に(たとえば、15秒で)ログアウトします。私はajaxを使用してログアウトしているため、ページをリダイレクトしたくありません。ログアウト後もIsAuthenticatedは10ループすべてで常に真であり、この関数が再実行された場合にのみ偽になります
ログアウトには次を使用します。
FormsAuthentication.SignOut();
Session.Abandon();
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
HttpCookie cookie = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
しかし、それでも本当です.. ユーザーがログアウトしたらすぐにスレッドの実行を停止したい