как реализовать сеанс winform, как тайм-аут сессии особенно - PullRequest
2 голосов
/ 11 мая 2009

Привет, я планирую реализовать такую ​​функцию, как сеанс в оконном приложении, но не для того, чтобы сначала хранить информацию об использовании. Основная цель - выйти из системы или, по крайней мере, запросить логин / пароль после истечения сеанса. Я могу не могу найти информацию о функции тайм-аута в Интернете. Я был бы очень признателен, если бы кто-то мог указать мне на некоторые ресурсы или поделиться с нами своим опытом. Спасибо за чтение этого PS: я использую C # .NET 2.0 с Visual Studio 2005 Merci.

Ответы [ 2 ]

3 голосов
/ 11 мая 2009

Самое простое решение - использовать Timer и установить для свойства Duration количество миллисекунд, которое вы хотели бы использовать в своем тайм-ауте. Всякий раз, когда вы сталкиваетесь с активностью, вы можете просто сбросить таймер, вызвав Stop, а затем немедленно позвонив Start. Поместите любой код в событие Timer Tick (при условии, что это System.Windows.Forms.Timer), и все будет готово.

2 голосов
/ 18 мая 2009

Я придумаю некоторую реализацию этой сессии, которую я хотел бы поделиться, особенно для тех, у кого такая же проблема. Она не идеальна, и мне бы хотелось, чтобы такие умные люди, как вы, давали мне советы, чтобы сделать ее приемлемой. довольно. прежде всего я создал класс usersession

using System.Timers;
public class usersession
{
    private static bool sessionalive;
    private static Timer usertimer;

    public static bool SessionAlive
    {
        get { return sessionalive; }
        set { sessionalive = value; }
    }


    public static void  BeginTimer()
    {
        try
        {
           SessionAlive = true;
            //usertimer.Start();
           usertimer = new Timer(int.Parse(ConfigurationManager.AppSettings["sessiontime"].ToString()));
            usertimer.Enabled = true;
           usertimer.AutoReset = false;  
           usertimer.Elapsed += new ElapsedEventHandler(DisposeSession);

        }
        catch (Exception ex)
        {

            return;
        }

    }


    private static void  DisposeSession(object source, ElapsedEventArgs e)
    {
        try
        {
            SessionAlive = false;
        }
        catch (System.Exception ex)
        {
            return;
        }

    }

    public static void ResetTimer()
    {
        try
        {
            SessionAlive = true;
            usertimer.Stop();
            usertimer.Start();
        }
        catch (Exception ex)
        {

            return;
        }

    }

}

это приложение mdi, поэтому внутри главной формы у меня есть функция startsession

public frMain()
    {
        InitializeComponent();
        StartSession();
        //SessionChecker();
    }
    public void StartSession()
   {
       try
       {
          usersession.BeginTimer();
       }
       catch (System.Exception ex)
       {
           MessageBox.Show(ex.ToString());
       }

   }

, поэтому каждый раз, когда пользователь нажимает на что-либо, мы проверяем свойство usersession.SessioAlive, как в этом фрагменте регистрационного ключа

case "transfer":
                if (!usersession.SessionAlive)
                {
                    new LoginForm().ShowDialog();
                }
                MessageBox.Show("cash back transfert page");
                break;

и внутри loginForm логин правильный, мы вызываем usersession.ResetTimer ()

this.DialogResult = DialogResult.OK;
        usersession.ResetTimer();
        this.Close();

Теперь я действительно хотел, чтобы проверка выполнялась в фоновом режиме, где мне нужен ваш совет. Здесь я использую Forms.timer для создания небольшой работы, но так как с Form.timer нет автоматического сброса, он выполняет бесконечный цикл. it.it внутри основной формы

 private void SessionChecker()
        {
            try
            {
                check = new Timer();
                check.Enabled = true;
                check.Interval = 1000;
                check.Tick += new EventHandler(check_Tick);
            }
            catch (Exception)
            {

                throw;
            }

        }

    void check_Tick(object sender, EventArgs e)
    {
        try
        {
            if (!usersession.SessionAlive)
            {
                new LoginForm().ShowDialog();
                check.Stop();

            }

        }
        catch (System.Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

    }

так что, как вы думаете, я должен сделать, чтобы он не требовал от пользователя каких-либо действий, прежде чем он запросит учетные данные после истечения сеанса. спасибо за чтение этого длинного материала. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...