J'ai spécifié le délai d'expiration de la session dans le fichier web.config. Lorsque la session expire, je ne reçois pas de redirection vers la page de connexion, mais je reçois une erreur indiquant que la référence d'objet n'est pas définie sur une instance.
Quelqu'un peut-il me dire la solution pour cela?
Vous pouvez vérifier le HttpContext.Current.User.Identity.IsAuthenticated
propriété qui vous permettra de savoir s'il existe ou non un utilisateur actuellement authentifié.
Modifier
vous pouvez utiliser la propriété IsNewSession pour vérifier si la session a été créée à la demande de la page
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");
}
}
}
}
pré
Stockez l'ID utilisateur dans la variable de session lorsque l'utilisateur se connecte au site Web et vérifie sur votre page principale ou le formulaire de page de base créé dont une autre page hérite ... et dans le chargement de la page, vérifiez que l'ID utilisateur est présent ou non, sinon redirigez vers la page de connexion
if(Session["Userid"]==null)
{
//session expire redirect to login page
}
Je préfère ne pas vérifier la variable de session dans le code à la place, utilisez FormAuthentication. Ils ont une fonctionnalité intégrée pour rediriger vers la LoginPage donnée spécifiée dans web.config.
Cependant, si vous souhaitez vérifier explicitement la session, vous pouvez vérifier la valeur NULL pour l'une des variables que vous avez créées dans la session plus tôt comme Pranay a répondu.
Vous pouvez créer la page Login.aspx et y écrire votre message, lorsque la session expire FormAuthentication redirige automatiquement vers loginUrl indiqué dans la section FormAuthentication
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="30">
</forms>
</authentication>
Le fait est que vous ne pouvez pas donner une page séparée pour Login et SessionExpire, vous devez donc afficher/masquer une section sur Login.aspx pour agir dans les deux sens.
Il existe une autre façon de rediriger vers la page sessionexpire après le délai d'expiration sans modifier formauthentication-> loginurl, voir le lien ci-dessous pour cela: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect .html
Utilisation Session.Contents.Count
:
if (Session.Contents.Count == 0)
{
Response.Write(".NET session has Expired");
Response.End();
}
else
{
InitializeControls();
}
Le code ci-dessus suppose que vous avez créé au moins une variable de session lors de la première visite de l'utilisateur sur votre site. Si vous n'en avez pas, vous n'utilisez probablement pas de base de données pour votre application. Pour votre cas, vous pouvez simplement affecter manuellement une variable de session en utilisant l'exemple ci-dessous.
protected void Page_Load(object sender, EventArgs e)
{
Session["user_id"] = 1;
}
Bonne chance à vous!
Vérifiez si elle est nulle ou non, par exemple
if(Session["mykey"] != null)
{
// Session is not expired
}
else
{
//Session is expired
}
de cette façon, de nombreuses personnes détectent que la session a expiré ou non. le code ci-dessous peut vous aider.
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");
}
}
}
}
}
J'utilise la réponse @ Adi-lester et j'ajoute quelques méthodes.
Méthode pour vérifier si la session est vivante
public static void SessionIsAlive(HttpSessionStateBase Session)
{
if (Session.Contents.Count == 0)
{
Response.Redirect("Timeout.html");
}
else
{
InitializeControls();
}
}
Créer une var de session dans le chargement de page
protected void Page_Load(object sender, EventArgs e)
{
Session["user_id"] = 1;
}
Créer une méthode SaveData (mais vous pouvez l'utiliser dans toutes les méthodes)
protected void SaveData()
{
// Verify if Session is Alive
SessionIsAlive(Session);
//Save Data Process
// bla
// bla
// bla
}
Ici, je vérifie les valeurs de session (deux valeurs remplies dans la zone de texte de la page précédente)
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();
}
}