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

来源:互联网 发布:如何修改手机淘宝评价 编辑:程序博客网 时间:2024/04/29 10:25


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
    {
        privateDispatcherTimer idleTimer;
        privateint minutesIdle;
        privatebool idle;
        privatebool attached = false;
        publicFormsWithTimeoutAuthentication()
            :this(20)
         { }
         publicFormsWithTimeoutAuthentication(intidleMinutes)
         {
             IdleMinutesBeforeTimeout = idleMinutes;
             idleTimer =new DispatcherTimer();
             idleTimer.Interval = TimeSpan.FromMinutes(1);
             idleTimer.Tick +=new EventHandler(idleTimer_Tick);
         }
         publicint IdleMinutesBeforeTimeout
         {
             get;
             set;
         }
         protectedoverride LoginResult EndLogin(IAsyncResult asyncResult)
         {
             var result =base.EndLogin(asyncResult);
             if(result.LoginSuccess == true)
             {
                 if(!attached) AttachEvents();
                 minutesIdle = 0;
                 idleTimer.Start();
             }
             returnresult;
         }
         protectedoverride LogoutResult EndLogout(IAsyncResult asyncResult)
         {
             idleTimer.Stop();
             returnbase.EndLogout(asyncResult);
         }
         privatevoid AttachEvents()
         {
             attached =true;
             Application.Current.RootVisual.MouseMove +=new MouseEventHandler(RootVisual_MouseMove);
             Application.Current.RootVisual.KeyDown +=new KeyEventHandler(RootVisual_KeyDown);
         }
         privatevoid RootVisual_KeyDown(objectsender, KeyEventArgs e)
         {
             idle =false;
         }
         privatevoid RootVisual_MouseMove(objectsender, MouseEventArgs e)
         {
             idle =false;
         }
         privatevoid idleTimer_Tick(objectsender, EventArgs e)
         {
             if(idle == true)
             {
                 minutesIdle += idleTimer.Interval.Minutes;
                 if(minutesIdle >= IdleMinutesBeforeTimeout)
                 {
                     Logout();
                 }
             }
             else
             {
                 minutesIdle = 0;
             }
             idle =true;
         }
         privatevoid 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)就超时退出登录,返回登录页面。

原创粉丝点击