在我的网络应用程序中,我正在使用一些会话变量,这些变量在我登录时设置:
e.g。 Session("user_id") = reader("user_id")
我通过我的应用程序使用它。
当会话变量超时时,这会在连接到数据库时引发错误,因为某些查询需要session("user_id")
。
如何设置会话变量,以便一旦超时到达登录页面,或者至少可以增加可用时间长度?
答案 0 :(得分:11)
我猜你正在使用表单身份验证。这里的诀窍是确保您的表单身份验证在会话之前到期。
我在这里回答了这个问题:
How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)
例如:
配置表单身份验证 - 这会将超时设置为60分钟:
<authentication mode="Forms">
<forms defaultUrl="~/Default.aspx"
loginUrl="~/Login.aspx"
slidingExpiration="true"
timeout="60" />
</authentication>
将会话到期时间延长到更长时间:
<sessionState
mode="InProc"
cookieless="false"
timeout="70"/>
在您的Login.aspx
代码中,您还可以在分配会话值之前执行Session.Clear();
删除过时的会话数据。
答案 1 :(得分:1)
过去我在每个页面上都使用了基页或母版页(对登录页面做了例外),它读取会话令牌以查看用户当前是否已登录。
如果它读取null,则保存当前url并重定向到登录页面。
登录后,会读取已保存的网址,并将用户重定向回所请求的网页。
增加会话超时值是IIS中的设置。
答案 2 :(得分:1)
如何设置会话变量,以便在超时后转到登录页面
检查它们是否为null执行Response.Redirect("Home.aspx");
或者至少如何增加 可用的时间长度?
它位于sessionState元素
中的web.config中答案 3 :(得分:0)
我认为很多人将其会话调用包装起来以提供“延迟加载”模式。像这样:
class SessionHelper
{
public static string GetUserId()
{
string userId = (string)System.Web.HttpContext.Current.Session["UserId"];
if( userId == null )
{
userId = reader("UserId");
System.Web.HttpContext.Current.Session["UserId"] = userId;
}
return userId;
}
}