web.configファイルでセッションタイムアウトを指定しました。セッションがタイムアウトすると、ログインページにリダイレクトされませんが、オブジェクト参照がインスタンスに設定されていないというエラーが表示されます。
誰かがこれの解決策を教えてもらえますか?
HttpContext.Current.User.Identity.IsAuthenticated
現在認証されているユーザーがいるかどうかを知ることができるプロパティを確認できます。
編集
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");
}
}
}
}
前
ユーザーUserid
がWebサイトにログインしたときにセッション変数に保存し、マスターページまたは作成されたベースページフォームを確認して、他のページが継承します。次に、存在するページロードチェックで、Userid
存在しない場合はログインページにリダイレクトします。
if(Session["Userid"]==null)
{
//session expire redirect to login page
}
コード内のセッション変数をチェックせず、代わりにFormAuthenticationを使用することを好みます。web.configで指定された特定のLoginPageにリダイレクトする機能が組み込まれています。
ただし、セッションを明示的にチェックする場合は、Pranayが回答したときに、セッションで以前に作成した変数のNULL値をチェックできます。
Login.aspxページを作成し、そこにメッセージを書き込むことができます。セッションが期限切れになると、FormAuthenticationはFormAuthenticationセクションで指定されたloginUrlに自動的にリダイレクトされます。
<authentication mode="Forms">
<forms loginUrl="Login.aspx" protection="All" timeout="30">
</forms>
</authentication>
LoginとSessionExpireに別々のページを指定することはできないため、Login.aspxの一部のセクションを表示/非表示にして、両方の方法で機能させる必要があります。
formauthentication-> loginurlを変更せずにタイムアウト後にsessionexpireページにリダイレクトする別の方法があります。これについては、以下のリンクを参照してください: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();
}
上記のコードは、ユーザーが最初にサイトにアクセスしたときに少なくとも1つのセッション変数が作成されていることを前提としています。データベースがない場合は、アプリにデータベースを使用していない可能性があります。あなたの場合、以下の例を使用して、セッション変数を手動で割り当てることができます。
protected void Page_Load(object sender, EventArgs e)
{
Session["user_id"] = 1;
}
幸運を祈ります!
null かどうかを確認します。
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();
}
}
ページ読み込みでセッション変数を作成する
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
}