Silver Lightning Ответов: 1

Как реализовать поддельный тайм-аут сеанса в MVC 5 / C#


Привет всем,

Добрый день!

I would like to ask on how to implement fake session timeout if 30 minutes passed without intervention from the user like mouse click or keyboard press. My existing application is always refreshing just to check the status flag from database table. Because of this, the regular session timeout is not working because of the constant refreshing of the page. Now, I would like to ignore the page refreshing or page reloading in every two seconds and execute the session timeout if no intervention coming from the mouse or keyboard. is it possible? If yes, what would be the best or sample code that I gonna do to execute the session timeout even the page is always reloading. Once the session timeout is executed, the page will be re-directed to log-in page.

Большое спасибо.

Ниже приведен мой пример кода в webconfig

Что я уже пробовал:

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="ActiveDirectoryDomainList" value="Domain_1;Domain_2" />
    <add key="IActiveDirectoryAdapter" value="ExternalSystems.ActiveDirectoryMockAdapter, ExternalSystems" />
    <add key="MemberFilter" value="Filter1,Filter2" />
    <add key="SessionTimeOut" value="30" />
    <add key="SqlCommandTimeOut" value="120" />


  </appSettings>




Ниже приведен мой SecurityController.cs

[HttpPost]
		[ValidateAntiForgeryToken]
		public ActionResult LogIn(LogInModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            model.IPAddress = Request.UserHostAddress;

            model.SessionId = HttpContext.Session.SessionID;
            model = SecurityBL.LogInUser(model);

            if (model.ErrorList.Any())
            {
				ViewBag.Message = model.ErrorList.First().ErrorMessage;
                return View(model);
            }

            FormsAuthentication.SetAuthCookie(model.UserName, false);
			SessionManager.LastLogin = DateTime.Now.ToString();
			SessionManager.EmployeeGroup = model.EmployeeGroup;
			SessionManager.UserID = model.UserID;
			Session.Timeout = Convert.ToInt32(model.SessionTimeout);

			switch (model.EmployeeGroup)
			{
				case Constants.AccountingGroup:
					return RedirectToAction("UserDashBoard", "AccountDashBoard");
				case Constants.AdminGroup:
					return RedirectToAction("AdminDashBoard", "AccountDashBoard");
				default:
					break;
			}

			return RedirectToAction("LogIn", "Security", new { info = "Identity not valid!" });
		}

F-ES Sitecore

Итак, у вас есть код, чтобы поддерживать сеанс активным, и вы хотите, чтобы код реализовывал тайм-аут сеанса? Почему бы вам просто не прекратить использовать код, который поддерживает сеанс активным?

Silver Lightning

Привет Сэр,
Я хотел бы реализовать таймер, который не сбрасывал бы даже страницу обновления, тайм-аут сеанса был установлен на 30 минут. Единственное прерывание, которое может сбросить тайм-аут сеанса, - это когда событие происходит с помощью нажатия клавиатуры и щелчка мыши. Я нашел то, что искал. jquery.countdown.js но я не знаю, как реализовать правильный код, чтобы таймер не сбрасывался, даже если страница всегда обновляется. Заранее благодарю Вас за вашу помощь, сэр.

1 Ответов

Рейтинг:
1

W∴ Balboos, GHB

Как насчет переосмысления своей логики? Держите внутренний таймер в вашей системе в течение периода покоя. Если он достигает определенного количества времени - то завершите работу вашего приложения, а затем позвольте существующему таймауту позаботиться обо всем остальном (хотя и с задержкой вашего процесса).

Это чистый метод в том смысле, что вы не полагаетесь на какой-либо потенциально компрометирующий безопасность код.

Потенциальный недостаток: ваше приложение запущено, но не используется. Между тем, пользователь активно работает с рабочей станцией. Вы позволяете своему приложению самоустраниться? Для этого вам, возможно, придется подключиться к системе, несколько вернув вас на полный круг.

Итак - объединение этих двух идей: ваше приложение останавливает его автоматическое обновление, если в противном случае оно бездействует в течение некоторого периода времени - тогда оно не будет отключаться от бездействия, если другие приложения используются; между тем, система может отключиться от бездействия, если никто ничего не делает


Silver Lightning

Привет Сэр,

Спасибо за вашу помощь. Да, я думаю о внутреннем таймере, но как я мог игнорировать обновление системы каждые две секунды. таймер всегда будет сброшен. Как я могу сделать так, чтобы время продолжалось и не сбрасывалось в течение 30 минут, даже если страница всегда перезагружается или обновляется?

W∴ Balboos, GHB

Как вы описали выше, это ваше приложение обновляется каждые две секунды. Просто перестаньте обновлять его в определенный момент, пока он не получит свой собственный ввод с клавиатуры. Если никто на него не смотрит - какое это имеет значение? Когда это будет сделано, вы можете позволить таймауту/отключению системы идти своим чередом.

Silver Lightning

Hi Sir, the page shouldn't be stopped because its getting an update from the database. what I'm trying to impose right now is to implement a jquery.countdown.js and put a timer inside. that timer would still continue even the page is refreshing. when the timer reached 30 minutes then the web application will re-directing to login page (session time out). Then, if the event is coming from the mouse or keyboard then that's the only time that my implemented timer will be reset. Do you think it's the right way to do to execute the session timeout? Any sample code on how could I implement the timer that will not reset even the page is refreshing? Thank you very much for your advised and helping my case here sir. :)

W∴ Balboos, GHB

Почему вы хотите обновить интерфейс, который никто не использует? Кроме того, если вы позволите нормальному тайм-ауту произойти, он все равно завершит работу вашего приложения. Я описал, что буду делать - остальное зависит от вас.