2014-01-29 4 views
0

Что делать, если кто-то пытается получить доступ к странице, которая разрешена только после входа в систему пользователям. Я сделал это, но он не работает, пожалуйста, помогите:Переменная сеанса для аутентификации пользователей

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

любая помощь была бы большой сэр –

ответ

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(); 
    } 
} 
+0

EmplID не существует в некорректном контексте, ERROR –

+1

@Evilrising - я позволил изменить имя переменной, так как локальные переменные должны начинаться с строчной буквы. Замените 'empId' на' EmplID'; и у меня была опечатка. – scheien

+0

Int.Try parse имеет некоторые недопустимые аргументы –

4

Во-первых, избегайте использования сеанса для хранения доказательств подлинности. Это делает вас уязвимыми для session fixation - кто-то может легко скопировать и повторно использовать содержимое cookie ASP.NET_SessionId, особенно если сайт доступен через HTTP, а не HTTPS.

Вместо этого используйте файлы cookie для аутентификации. Да, файлы cookie имеют некоторые недостатки, такие как предоставление злонамеренным пользователям зашифрованного текста вашего cookie проверки подлинности. Тем не менее, FormsAuthenticationProvider был разработан с учетом этого. Вот почему это обычно considered safer to use cookies.

Во-вторых, постарайтесь не использовать сеанс вообще. Одно из огромных преимуществ ASP.MVC is the ability to run sessionless, позволяющее вам легко масштабировать ваш сайт, если это необходимо.

Смежные вопросы