Ответ 1
Вы можете проверить свойство HttpContext.Current.User.Identity.IsAuthenticated
, которое позволит вам узнать, есть ли пользователь, прошедший проверку подлинности, или нет.
Я указал время сеанса в файле web.config.., когда сеанс - это таймаут, не получающий перенаправление на страницу входа, но я получаю ошибку, ссылаясь на ссылку на объект, не установленную в экземпляр.
может ли кто-нибудь сказать мне решение для этого?
Вы можете проверить свойство HttpContext.Current.User.Identity.IsAuthenticated
, которое позволит вам узнать, есть ли пользователь, прошедший проверку подлинности, или нет.
Edit
вы можете использовать свойство IsNewSession, чтобы проверить, был ли сеанс создан по запросу страницы
protected void Page_Load()
{
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string cookieHeader = Request.Headers["Cookie"];
if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
{
Response.Redirect("sessionTimeout.htm");
}
}
}
}
до
Сохранять идентификатор пользователя в переменной сеанса при входе пользователя на веб-сайт и проверке на главной странице или создании формы базовой страницы, когда другая страница наследует... и при загрузке страницы проверяет, присутствует ли идентификатор пользователя или нет, если не перенаправлен на логин страница
if(Session["Userid"]==null)
{
//session expire redirect to login page
}
Я предпочитаю не проверять переменную сеанса в коде вместо использования FormAuthentication. Они имеют встроенную функцию для перенаправления на заданный LoginPage, указанный в web.config.
Однако, если вы хотите явно проверить сеанс, вы можете проверить значение NULL для любой из переменной, созданной в сеансе ранее, как ответ Пранай.
Вы можете создать страницу Login.aspx и написать свое сообщение там, когда сеанс истекает. FormAuthentication автоматически перенаправляет на loginUrl, указанный в разделе FormAuthentication.
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="30">
</forms>
</authentication>
Дело в том, что вы не можете предоставить отдельную страницу для Login и SessionExpire, поэтому вам нужно показать/скрыть какой-то раздел в Login.aspx, чтобы действовать в обоих направлениях.
Существует другой способ перенаправления на страницу sessionexpire после таймаута без изменения formauthentication- > loginurl, см. ссылку ниже для этой ссылки: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html
Используйте Session.Contents.Count
:
if (Session.Contents.Count == 0)
{
Response.Write(".NET session has Expired");
Response.End();
}
else
{
InitializeControls();
}
В приведенном выше коде предполагается, что у вас есть хотя бы одна переменная сеанса, созданная при первом посещении пользователем вашего сайта. Если у вас его нет, вы, скорее всего, не используете базу данных для своего приложения. Для вашего случая вы можете просто вручную назначить переменную сеанса, используя приведенный ниже пример.
protected void Page_Load(object sender, EventArgs e)
{
Session["user_id"] = 1;
}
Удачи вам!
Проверьте, является ли оно нулевым или нет.
if(Session["mykey"] != null)
{
// Session is not expired
}
else
{
//Session is expired
}
Я использую ответ @Adi-lester и добавляю некоторые методы.
Метод проверки наличия сеанса
public static void SessionIsAlive(HttpSessionStateBase Session)
{
if (Session.Contents.Count == 0)
{
Response.Redirect("Timeout.html");
}
else
{
InitializeControls();
}
}
Создать сеанс var в загрузке страницы
protected void Page_Load(object sender, EventArgs e)
{
Session["user_id"] = 1;
}
Создайте метод SaveData (но вы можете использовать его во всех методах)
protected void SaveData()
{
// Verify if Session is Alive
SessionIsAlive(Session);
//Save Data Process
// bla
// bla
// bla
}
Здесь я проверяю значения сеанса (два значения заполняются в текстовом поле на предыдущей странице)
protected void Page_Load(object sender, EventArgs e)
{
if (Session["sessUnit_code"] == null || Session["sessgrcSerial"] == null)
{
Response.Write("<Script Language = 'JavaScript'> alert('Go to GRC Tab and fill Unit Code and GRC Serial number first')</script>");
}
else
{
lblUnit.Text = Session["sessUnit_code"].ToString();
LblGrcSr.Text = Session["sessgrcSerial"].ToString();
}
}
Таким образом, многие люди обнаруживают, что сеанс истек или нет. ниже код может помочь u.
protected void Page_Init(object sender, EventArgs e)
{
if (Context.Session != null)
{
if (Session.IsNewSession)
{
HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
if (newSessionIdCookie != null)
{
string newSessionIdCookieValue = newSessionIdCookie.Value;
if (newSessionIdCookieValue != string.Empty)
{
// This means Session was timed Out and New Session was started
Response.Redirect("Login.aspx");
}
}
}
}
}