【发布时间】:2015-06-02 14:31:57
【问题描述】:
我在 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>
在您必须登录的页面上检查是否已登录 if (!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");
}
}
}
}
用户服务中的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。但 2 分钟后,我被重定向到登录表单。我可以解决这个问题吗?如果我在 localhost 上调试,它似乎可以工作,但不能在线。
登录有效。会话已设置(否则我无法进入下一页)。如果我转到另一个页面(快于 +-5 分钟),那么我仍然处于登录状态。所以问题是再生问题。
或者如果不可能的话,Cookies?通常我在 PHP 中使用 cookie,.. 但是有没有办法在 ASP.NET 中以安全的方式做到这一点?
【问题讨论】:
-
我很久以前写过这篇文章,希望对您有所帮助...aspalliance.com/…
-
根据您的配置,会话值存储在 Proc 中,因此也取决于 w3wp.exe 进程。如果 applicationPool 重新启动的会话丢失。
-
我不确定我是否理解这一点。将项目上传到网络服务器后,我再次登录。但问题依然存在。自从上传到服务器后,我没有更改其他内容。
标签: asp.net session cookies session-timeout