Как увеличить время ожидания сеанса входа на веб-страницу c # в visual studio? - PullRequest
0 голосов
/ 09 октября 2018

Итак, вот в чем дело ... Когда я захожу, используя login.aspx, он перенаправляет меня на admin.aspx.Если оставить страницу администратора без дела на несколько минут, а затем попытаться открыть веб-форму, это выдает ошибку.

"Object reference not set to an instance of an object."
**Source Error:**
Line 15:     protected void Page_Load(object sender, EventArgs e)
Line 16: { 
Line 17: string s=Session["po"].ToString();
Line 18: 
Line 19: Session["y"]=".";

Here is the Screeshot image

Теперь, когда я снова захожу, страницы работают нормально.И снова через несколько минут я получаю эту ошибку всякий раз, когда я пытаюсь открыть страницу со страницы администратора или обновить страницу.С другой стороны, у меня мало страниц, и у них нет кода сессии выше, они работают нормально.Но единственная проблема в том, что они могут быть открыты без входа в систему, а те, у кого есть эта команда, не открываются напрямую.Всякий раз, когда я пытаюсь открыть их без входа в систему, я получаю эту ошибку тоже.

Можете ли вы объяснить мне, как решить эту проблему?Есть ли способ увеличить время ожидания сеанса?Это какой-то сеанс выхода из системы?

1 Ответ

0 голосов
/ 09 октября 2018

Как отметил в комментарии Джонатон Чейз, вы можете настроить Session timeout в веб-конфигурации Тайм-аут сеанса в ASP.NET

Другое решение состоит в создании службы, которая на самом деле ничего не делает и делаетзапросите у клиента эту услугу с некоторым интервалом времени или просто позвоните один раз, чтобы увеличить session.Например, если ваш session истекает через 30 минут, ваш интервал будет 29 минут.Таким образом, вы можете выбрать, на каких страницах вы хотите «держать» session больше или сделать его бесконечным.

Служба: RetainSession.ashx

using System.Web;
using System.Web.SessionState;

namespace WebApplication
{
    public class RetainSession : IHttpHandler, 
        IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("Ok");
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }
}

Сторона клиента:

var interval = 1000 * 60 * 29;
var intervalKey = window.setInterval(function(){
    $.get('/services/RetainSession.ashx?v='+Date.now());
},interval);

Чтобы остановить интервал:

window.clearInterval(intervalKey);

Вызовите один раз:

var timeout = 1000 * 60 * 29; 
window.setTimeout(function(){
    $.get('/services/RetainSession.ashx?v='+Date.now());
},timeout);
...