У меня проблемы с сеансами в asp.net. Некоторое время я искал веб-сайт, но не мог найти причину, по которой он не работает. Сессия исчезает через несколько минут. Это проект, который не создан мной, я не герой в aspx. Но я пытаюсь решить эту проблему.Сессии ASP.NET Timeout
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");
}
}
}
}
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 минуты я перенаправлен на форму входа. Могу ли я решить это? Если я отлаживаюсь на localhost, он, похоже, работает, но не в сети.
Вход в систему работает. Сеанс установлен (иначе я не смог бы войти в следующие страницы). Если я перейду на другую страницу (быстрее +5 минут), то я все равно войду в систему. Таким образом, проблема репродуктивная.
Или, если это невозможно, Cookies? Обычно я работаю с файлами cookie на PHP, но есть ли способ сделать это в ASP.NET безопасным способом?
В соответствии с вашими значениями сеанса конфигурации хранятся InProc так зависят также от w3wp.exe процесса. Если перезапустимые сеансы applicationPool были потеряны. – D4rkTiger
Я не уверен, понимаю ли я это. После загрузки проекта на веб-сервер я снова вошел в систему. Но проблема остается. Начиная с загрузки на сервер, я ничего не изменил. – Finduilas
Я давно написал эту статью, и я надеюсь, что она вам поможет ... http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET –