我有关于ASP.NET会话的问题。我在网上搜索了一段时间,但无法找到为什么它不起作用的原因。会话在几分钟后消失。这是一个不是由我创建的项目,我不是aspx专家。但是我正在努力解决这个问题。
Web.config
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Default.aspx" timeout="120" slidingExpiration="true" />
</authentication>
<customErrors mode="RemoteOnly"/>
<httpRuntime requestValidationMode="2.0"/>
<pages validateRequest="false" />
<sessionState mode="InProc" cookieless="false" timeout="120" />
</system.web>
检查需要登录的页面是否已登录 如果 (!functions.isLoggedIn(Session)) { Response.Redirect("Default.aspx"); } 函数
public static bool isLoggedIn(HttpSessionState session)
{
return session["user"] != null;
}
未登录?显示登录表单,填写表单并将其发送到服务器进行验证。
protected void Page_Load(object sender, EventArgs e)
{
if (Request["do"] != null)
{
switch (Request["do"])
{
case "logout":
Session.Abandon();
break;
}
}
if (Request.ServerVariables["REQUEST_METHOD"].ToLower() == "post")
{
//get username en password
string username = Request["username"];
string password = Request["password"];
if (String.IsNullOrWhiteSpace(username) || String.IsNullOrWhiteSpace(password))
{
LoginMessage.Text = "Please fill in all the fields...";
}
else
{
password = FormsAuthentication.HashPasswordForStoringInConfigFile(
password,
"SHA1");
UserService gs = new UserService();
user g = gs.getUserByLogin(username, password);
if (g == null)
{
//wrong login
LoginMessage.Text = "Invalid username/password.";
}
else
{
//good login
Session["user"] = g;
System.Diagnostics.Debug.WriteLine("timeout:" + Session.Timeout);
Response.Redirect("Home.aspx");
}
}
}
}
userservice中的GetUserByLogin函数
public user getUserByLogin(string username, string password)
{
user g;
var db = new projectName.Db.Models.projectnetContext();
IQueryable<user> query = from gb in db.users
where gb.username.Equals(username)
&& gb.Passwoord.Equals(password.ToLower())
&& gb.Status == 1
select gb;
if (!query.Any())
g = null;
else
g = query.First();
return g;
}
登录后,创建会话
Session["user"] = g;
我的问题是我已经设置了超时时间,但它似乎不起作用。如果我在服务器上检查超时时间,它被设置为120。但是在两分钟后,我会被重定向到登录表单。我能解决这个问题吗?如果我在本地调试,它似乎有效,但在线上不行。
登录功能正常。会话已设置(否则我就无法进入下一页)。如果我转到另一个页面(速度比+-5分钟快),那么我仍然登录。所以这个问题是可重现的。
如果不行,那么使用Cookies呢?通常我在PHP中使用Cookies,..但是在ASP.NET中有一种安全的方法可以做到吗?