使用Silverlight时防止ASP.NET会话超时

Rus*_*son 8 c# asp.net authentication silverlight session

我正在编写一个既包含ASP.NET配置系统又包含Silverlight应用程序的程序.大多数用户将保留在Silverlight页面上,除了登录等外,不会访问ASP.NET站点.

问题是,我需要会话保持活动以进行身份​​验证,但即使用户使用silverlight应用程序的功能,会话也会超时.

有任何想法吗?

Ner*_*ury 12

在托管silverlight控件的页面上,您可以设置一个javascript计时器并每隔5分钟对一个Http Handler(.ashx)执行ajax调用以保持会话处于活动状态.一定要实现你的Handler类IRequiresSessionState.

我推荐使用Handler,因为它更容易控制返回的响应文本,并且它比aspx页面更轻量级.

您还需要正确设置响应缓存,以确保浏览器每次都进行ajax调用.

UPDATE

以下是HttpHandler的示例代码

public class Ping : IHttpHandler, IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.Response.ContentType = "text/plain";
        context.Response.Write("OK");
    }

    public bool IsReusable
    {
        get { return true; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果你使用jQuery,你可以将它放在你的主机aspx页面上

setInterval(ping, 5000);

function ping() {
    $.get('/Ping.ashx');
}
Run Code Online (Sandbox Code Playgroud)

间隔以毫秒为单位,因此我的示例将每隔5秒ping一次,您可能希望它是一个更大的数字.Fiddler是调试ajax调用的好工具,如果不使用它,请启动.