我在asp.net中遇到了会话问题。我在网上搜索了一段时间,但找不到它不起作用的原因。会议在几分钟后消失。这是一个不是由我自己创建的项目,我不是aspx中的英雄。但我试图解决这个问题。会话ASP.NET超时
的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(会话)){ 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功能userservice
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分钟后,我被重定向到登录表单。我能解决这个问题吗?如果我在本地主机上调试,它似乎工作,但不在线。
登录工作。会话已设置(否则我无法进入下一页)。如果我去另一个页面(更快然后+ -5分钟),那么我仍然登录。所以这个问题是生殖。
或者如果不可能,Cookie?通常我在PHP中使用Cookie,但是有没有办法在ASP.NET中以安全的方式执行它?
根据您的配置会话值存储INPROC如此依赖W3wp.exe进程也。如果applicationPool重新启动会话丢失。 – D4rkTiger
我不确定我是否理解这一点。将项目上传到网络服务器后,我再次登录。但问题依然存在。自从上传到服务器后,我没有改变别的东西。 – Finduilas
我很久以前写过这篇文章,希望它能帮助你... http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET –