2010-07-22 3 views
2


Я создаю веб-приложение с использованием ASP.Net. Я использую сеанс в своем приложении.
Существует один сценарий, когда я пытаюсь получить доступ к переменной сеанса через Javascript. Он работает нормально, когда я обращаюсь к нему в нормальном состоянии. Но после истечения срока действия сеанса, если нажать на любую кнопку, он выдает исключение и ведет себя ненормально, в результате чего страница не найдена.
Вот код, который я использую;
Обнаруживать, если сеанс истек с использованием javascript

var TransactionID = '<% =((Hashtable)(Session["SessionData"]))["TransactionID "] %>'; 
if(TransactionID !='') 
{ 
    //action 
} 

Я пытаюсь добиться чего-то подобного рода в C#;

String lsStr; 
if(null != lsStr) 
{ 
    //action 
} 

Пожалуйста, помогите мне, если кто знает, как проверить, существует ли сессия или нет, используя javascript.
Заранее спасибо.

+5

Хм. Самый безопасный способ - отправить быстрый Ajax-запрос серверу, который сообщает вам, активен ли сеанс. Но также следует использовать таймер со стороны JavaScript. –

+2

, но не отправит ajax сохранить сеанс в живых? – TheVillageIdiot

+1

@TheVillageidiot вы должны иметь возможность настроить сеанс, но вы хотите, чтобы вы могли совершать определенные вызовы AJAX, не поддерживая сеанс, и только иметь на основе действий пользователя. – Rick

ответ

1

Я бы рекомендовал общественную собственность на странице с фоновым кодом, что делает:

public string TransactionID 
{ 
    get { 
     var data = ((Hashtable)(Session["SessionData"])); 
     if (data != null) 
      return data["TransactionID "]; 
     else 
      return null; 
    } 
} 

Чтобы обойти непосредственную ошибку. Если вы хотите, чтобы механизм опроса знал, когда он истекает, рассмотрите обратный отсчет таймера JS/AJAX на идею сервера. Невозможно проверить сеанс от клиента без запроса информации с сервера.

Но, используя свойство выше, когда страница отправляется назад, а на клиенте переменная JS транзакции имеет значение NULL, это может быть способ идентификации того, что истек срок сеанса.

HTH.

+0

Спасибо Brian :) Я думал о hiddenVariable. так что не было бы необходимости обращаться к коду за свойством. Можно ли использовать скрытые переменные? –

+0

Скрытые переменные отображаются непосредственно на экране. Если у вас есть ожидание конфиденциальности с идентификатором транзакции, скрытые переменные не являются безопасными, но для обеспечения безопасности вы можете зашифровать ключ и сохранить зашифрованное значение там. –

0

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

Лучшая ставка - выполнить проверку только тогда, когда вам нужно выполнить запрос ajax на страницу, которая не требует проверки подлинности, что страница может затем проверить, существует ли определенная переменная сеанса и вернуть true или false.

В качестве примера приложения, с которым я недавно работал, была страница с логикой на стороне клиента, которая требовала проверок, чтобы убедиться, что сеанс все еще существует. В этом случае для этой страницы я знал, что идентификатор пользователя всегда хранился в Session ["UserID"], поэтому я создал aC# ajax-страницу, которая только что вернула false, если этот объект был null и true, если он существует, это позволило мне вызвать эту страницу из JavaScript и сообщите, истек ли срок сессии. Вероятно, это немного изменится, чтобы соответствовать вашей ситуации, но я уверен, что вы могли бы сделать что-то, используя ту же логику.