Silverlight超时退出怎么实现?(AuthticationTimeOut)


Silverlight用户用表单身份认证FormsAuthentication登录以后,如果一定的时间没有动作(Idle)就超时退出登录,这样的功能怎么实现?(关于Silverlight FormsAuthentication用户登录,可以参考BusinessApplication,新建一个BusinessApplication即可)。好了,来实现这个超时退出功能。

新的类FormsWithTimeoutAuthentication继承FormsAuthentication
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class FormsWithTimeoutAuthentication : FormsAuthentication
     {
         private DispatcherTimer idleTimer;
         private int minutesIdle;
         private bool idle;
         private bool attached = false ;
         public FormsWithTimeoutAuthentication()
             : this (20)
          { }
          public FormsWithTimeoutAuthentication( int idleMinutes)
          {
              IdleMinutesBeforeTimeout = idleMinutes;
              idleTimer = new DispatcherTimer();
              idleTimer.Interval = TimeSpan.FromMinutes(1);
              idleTimer.Tick += new EventHandler(idleTimer_Tick);
          }
          public int IdleMinutesBeforeTimeout
          {
              get ;
              set ;
          }
          protected override LoginResult EndLogin(IAsyncResult asyncResult)
          {
              var result = base .EndLogin(asyncResult);
              if (result.LoginSuccess == true )
              {
                  if (!attached) AttachEvents();
                  minutesIdle = 0;
                  idleTimer.Start();
              }
              return result;
          }
          protected override LogoutResult EndLogout(IAsyncResult asyncResult)
          {
              idleTimer.Stop();
              return base .EndLogout(asyncResult);
          }
          private void AttachEvents()
          {
              attached = true ;
              Application.Current.RootVisual.MouseMove += new MouseEventHandler(RootVisual_MouseMove);
              Application.Current.RootVisual.KeyDown += new KeyEventHandler(RootVisual_KeyDown);
          }
          private void RootVisual_KeyDown( object sender, KeyEventArgs e)
          {
              idle = false ;
          }
          private void RootVisual_MouseMove( object sender, MouseEventArgs e)
          {
              idle = false ;
          }
          private void idleTimer_Tick( object sender, EventArgs e)
          {
              if (idle == true )
              {
                  minutesIdle += idleTimer.Interval.Minutes;
                  if (minutesIdle >= IdleMinutesBeforeTimeout)
                  {
                      Logout();
                  }
              }
              else
              {
                  minutesIdle = 0;
              }
              idle = true ;
          }
          private void Logout()
          {
              //这里是你自己的退出登录代码,我这里是调用JS,刷新页面而已
               HtmlPage.Window.Invoke( "RefreshSL" , "Invoke" );
          }
      }
修改App.xaml,修改WebContext表单认证模式
复制代码
   
   
1 < Application 2 x:Class ="MyAppSL.App" 3 xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:app ="clr-namespace:MyAppSL" 6 xmlns:appService ="clr-namespace:MyAppSL.Services" 7 xmlns:Lng ="clr-namespace:MyAppSL.Resources" 8 xmlns:appsvc ="clr-namespace:System.ServiceModel.DomainServices.Client.ApplicationServices;assembly=System.ServiceModel.DomainServices.Client.Web" 9 Startup ="Application_Startup" 10 UnhandledException ="Application_UnhandledException" > 11 12 < Application.ApplicationLifetimeObjects > 13 < app:WebContext > 14 < app:WebContext.Authentication > 15 < appService:FormsWithTimeoutAuthentication IdleMinutesBeforeTimeout ="2" /> 16 </ app:WebContext.Authentication > 17 </ app:WebContext > 18 </ Application.ApplicationLifetimeObjects > 19 20 <!-- 原来是这样的 --> 21 <!-- <Application.ApplicationLifetimeObjects> 22 <app:WebContext> 23 <app:WebContext.Authentication> 24 <appsvc:FormsAuthentication /> 25 </app:WebContext.Authentication> 26 </app:WebContext> 27 </Application.ApplicationLifetimeObjects> --> 28 29   </ Application >
复制代码

我这里配置的Idle两分钟就超时退出登录,可以自己配置超时时间。实现的效果就是用户登录Silverlight应用以后,如果一定的时间没有动作(Idle)就超时退出登录,返回登录页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值