如果有人试图访问仅在登录用户后才允许的页面,我该怎么办?我已经这样做但是它不起作用,请帮助:
public ActionResult ViewMyAtdRecord()
{
int EmplID = Convert.ToInt32(Session["Employee"]);
if (Session["Employee"] == "")
{
ViewBag.Message = "NOT AUTHORIZED TO VIEW THIS PAGE";
return View();
}
else
{
IEnumerable<GetAtdRecord_SpResult> MyAtdRecord = DataContext.GetAtdRecord_Sp(EmplID).ToList();
var names = (from n in DataContext.HrEmployees select n).Distinct();
return View(MyAtdRecord);
}
}
实际上会议从这里开始。
public ActionResult AfterLogIn(int EmplID, String EmpPwd)
{
int Num_Rows = (int)DataContext.GetUser_Pwd(EmplID, EmpPwd).First().No_Rows;
if (Num_Rows == 1)
{
Session["Employee"] = EmplID.ToString() ;
ViewBag.Message = Session["Employee"];
}
else
{
ViewBag.Message = "Log-in Failed";
}
return View();
}
答案 0 :(得分:4)
首先,避免使用会话存储身份验证证据。它使您容易受到session fixation的攻击 - 有人可以轻松复制和重用ASP.NET_SessionId
cookie的内容,特别是如果该网站可通过HTTP而非HTTPS访问。
请改用身份验证Cookie。是的,cookie有一些缺点,例如向恶意用户提供身份验证cookie的密文。然而FormsAuthenticationProvider已经考虑到了这一点。这就是为什么它通常是considered safer to use cookies。
其次,尽量避免使用会话。 ASP.MVC is the ability to run sessionless的巨大优势之一,可让您在需要时轻松扩展您的网站。
答案 1 :(得分:1)
我建议使用FormsAuthentication
(由@akton建议)并使用Authorize属性
如果您想使用Session
而不是FormsAuthentication
,那么您可以尝试一下:
public ActionResult ViewMyAtdRecord()
{
int empId = 0;
int.TryParse((string)Session["Employee"], out empId); // parse variable to int
if (empId > 0) // we have an employee id, lets show that record.
{
IEnumerable<GetAtdRecord_SpResult> MyAtdRecord = DataContext.GetAtdRecord_Sp(empId ).ToList();
var names = (from n in DataContext.HrEmployees select n).Distinct();
return View(MyAtdRecord);
}
else // we do not have an employee id, show not authorized message.
{
ViewBag.Message = "NOT AUTHORIZED TO VIEW THIS PAGE";
return View();
}
}