我在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(&#34; Default.aspx的&#34); } 功能
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中以安全的方式进行?
答案 0 :(得分:0)
嗯,我建议你在asp.net中使用profile而不是session。
答案 1 :(得分:0)
您的方案中有两个方面。您有身份验证和会话。这是两件不同的事情。
您在web.config中管理的会话存储了一个超时为120分钟(2小时)的值
但身份验证在web.config中也有一个配置部分。 https://msdn.microsoft.com/en-us/library/532aee0e%28v=vs.85%29.aspx
那么你想先做什么?
答案 2 :(得分:0)
请找到此MVC控制器操作方法示例。
// POST: /Secure/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginFormModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.Login, model.Password))
{
using (var db = new DatabaseEntities())
{
var user = db.Users.Single(u => u.Login == model.Login);
Membership.UpdateUser(new MembershipUser("UserMembershipProvider", user.Login, null, null, null, null, true, false, DateTime.MinValue, DateTime.Now, DateTime.MinValue, DateTime.MinValue, DateTime.MinValue));
#region Create Authentication Cookie
Response.Cookies.Add(MyAppFormAuthenticationCookie.Create(user, model.RememberMe));
#endregion
if (!string.IsNullOrWhiteSpace(returnUrl))
{
return Redirect(HttpUtility.UrlDecode(returnUrl));
}
if (model.UserFormType == UserType.Candidate)
{
return RedirectToAction("Index", "Dashboard", new { area = "Candidate" });
}
if (model.UserFormType == UserType.Recruiter)
{
return RedirectToAction("Index", "Dashboard", new { area = "Recruiter" });
}
if (model.UserFormType == UserType.SuperAdmin || model.UserFormType == UserType.Admin)
{
return RedirectToAction("Index", "Dashboard", new { area = "Admin" });
}
}
}
ModelState.AddModelError("", "Incorrect username and/or password");
return View("Index", model);
}
return RedirectToAction("Index", "Home");
}
在此示例中,您有:
那么,您是否有类似的方法来验证应用程序中的用户?
EDIT1:
通常,您必须完成以下类似的身份验证过程:
var authTicket = new FormsAuthenticationTicket("MyAuthTicket", rememberMe, timeout: 120);
var encryptAuthTicket = FormsAuthentication.Encrypt(authTicket);
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encryptAuthTicket) { Expires = authTicket.Expiration });
答案 3 :(得分:-2)
只是一个建议...你有任何重新指示(Response.Redierct)差异。网站或尝试访问您无权访问的资源?会议将在这些情况下到期。