Как сбросить таймаут состояния сеансов ASP.Net с помощью ajax-запроса - PullRequest
4 голосов
/ 21 февраля 2012

Я работаю над сайтом ASP.Net Full-Ajax.Поскольку все операции выполняются с помощью запросов Ajax, любой запрос обратной передачи не будет отправляться на сервер. С другой стороны, у меня есть таймер javascript, который отправляет запрос ajax для проверки сеансов и, если он истек, перенаправляет пользователя на страницу входа.

Проблема здесь: когда пользователь работает с страницей в течение 20 минут и все операции будут выполняться с запросами ajax через 20 минут, его сеанс истек, и пользователь будет перенаправлять на страницу входа (с помощью этого таймера JavaScript) именно во время работы со страницей.Поэтому мне нужно обновить состояние сеанса с помощью запроса ajax.Но как? Как это сделать, чтобы сбросить тайм-аут состояния сеансов по запросу ajax!? !!

В зависимости от результатов поиска Google, я не могу быть предварительно сформирован запросом ajax, поскольку SessionId хранится в клиенте в виде файла cookie.и для его обновления необходимо предварительно сформировать запрос обратной отправки сообщения: (

Примечание : состояние сеанса установлено в режиме InProc с timeout = 20

Извините за мой плохойАнглийский синтаксис, я новичок на английском языке

С уважением, Foroughi

ОБНОВЛЕНИЕ : Устанавливает ли время ожидания сеансов обновления ajax время ожидания? !!

ОБНОВЛЕНИЕ : Когда мой пользователь входит на сайт, я назначаю сессию следующим образом:

Session["UserId"] = UserObject.Id;

и на всех своих страницах я использую какой-либо веб-метод для предварительной операции, такой как:

[WebMethod]
public static Opr1 (Paramethers...)
{

   //Question is here , how can i update UserId  session to prevent to expire,how can i update it

   //execute my codes to preform Opr1

}

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Если вы используете WebMethods, вы должны украсить свои методы как

[WebMethod(EnableSession = true)]

Далее, если вам нужно сохранить сеанс, вы должны попытаться создать HTTPHandler, который реализует IRequireSessionState, который этот интерфейс позволяет получить / установить (десериализовать/ serialize) переменные сеанса, которые в конечном итоге уменьшат время ожидания сеанса.

Это хорошая статья о сеансах и вызовах ajax.

http://seejoelprogram.wordpress.com/2008/11/10/maintaining-aspnet-session-state-in-an-ajax-application/

Надеюсь, что это будетполезно

С уважением.

0 голосов
/ 21 февраля 2012

я так делаю:

У меня есть простой веб-сервис для проверки подлинности пользователя, но вы можете изменить код, чтобы проверить, не истек ли сеанс.

<%@ WebService Language="C#" Class="CheckAutheticated" %>

using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.Web.Script.Services.ScriptService]
public class CheckAutheticated  : System.Web.Services.WebService {

[WebMethod]
public string checkAuthenticated()
{
    return "authenticated";
}

}

тогда на стороне клиента я это называю:

function checkAuthenticated() {
        {
            $.ajax({
                type: "POST",
                url: "CheckAutheticated.asmx/checkAuthenticated",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: checkAuthenticatedOk,
                error: checkAuthenticatedError
            });
        }
    }
    function checkAuthenticatedOk() { }
    function checkAuthenticatedError() {
        $("#sessionExpiredCover").show();
    }

вот некоторые базовые css

<style type="text/css">
    #sessionExpiredCover {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 100000;
    display: none;
    background-color: #fff;
    /*opacity: .7;
    filter:progid:DXImageTransform.Microsoft.BasicImage(opacity=.7);*/
    }
    </style>

и, наконец, div

    <div id="sessionExpiredCover">
    <div style="background-color:#fff; margin:100px; height:200px; width:400px;"><h1>Session expired</h1>
        <br />
        <asp:HyperLink NavigateUrl="~/Login.aspx" runat="server" Text="Please log in again" />
    </div>
    </div>
...