先前的用户登录将被最近的/最新的用户登录替换

时间:2018-11-12 12:20:32

标签: c# asp.net asp.net-mvc

我正在asp.net mvc项目上工作。该项目在localhost上运行得非常好,但是当我将该项目上载到服务器上时,我遇到了一些问题。我从一台计算机上登录,它成功登录了。我尝试以其他用户的身份登录。现在,我转到上一个用户登录,然后刷新页面,第二个用户登录将取代第一个用户登录。通常,前一个用户登录将替换为最近/最近的用户登录。在此问题上进行了大量搜索,但找不到任何内容。请分享有关此问题的一些建议。

我有一个名为AuthenticateController的控制器,其动作为 登录和注销。我尝试实现会话,但没有运气。代码在这里。如果可能,或者我需要对代码进行任何更改,请帮助我提供正确的会话实现代码。通过正确的登录注销和后退按钮问题实现身份验证的方法。谢谢!!

public class AuthenticateController : Controller
{
    DBEntities entity = new DBEntities();

    public static int userid = 0;
    public static string getreference = string.Empty;

    public ActionResult Login()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Login(AuthenticateModel model)
    {
        try
        {
            var check = entity.TblName.Where(x => x.UserName == model.UserName && x.Password == model.Password).ToList();
            if (check.Count > 0)
            {
                foreach (var r in check)
                {
                    GlobalVaribale.UserId = r.UserId;
                    //FullName
                    GlobalVaribale.UserName = r.FullName;
                    GlobalVaribale.UserAccessLevel = r.AccessLevel.Value;
                    GlobalVaribale.OrgId = r.OrganisationId.Value;
                    Session["UserId"] = r.UserId;
                    Session.Timeout = 10;

                }
                return RedirectToAction("Index", "Home");
            }
            else  
            {
                TempData["Wrong"] = "Invalid Credentials";
                return View();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            return View();
        }

    }

    public ActionResult Logout()
    {
        Session["UserId"] = null;
        Session.Abandon();
        GlobalVaribale.UserId = 0;
        GlobalVaribale.UserName = string.Empty;
        GlobalVaribale.UserAccessLevel = 0;
        GlobalVaribale.OrgId = 0;
        return RedirectToAction("Login");
    }


}

}

我创建了一个全局文件夹,其中有一个名为GlobalVaribale的类。代码在下面给出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TimeSheet.Global
{
public static class GlobalVaribale
{
    public static int UserId = 0;
    public static int OrgId = 0;
    public static int UserAccessLevel = 0;
    public static string UserName = string.Empty;

    public enum AccessLevel
    {
        admin = 1,
        management = 2,
        employee = 3,
        contractor = 4,
        superamin = 5
    }
}

}

1 个答案:

答案 0 :(得分:0)

您有两个问题。一种是您在网络环境中使用static变量,这意味着它们将在所有访问者之间共享。不要那样做

您更大的问题是这个

var check = entity.TblName.Where(x => x.UserName == model.UserName && x.Password == model.Password).ToList();

您正在使用自己的身份验证逻辑。绝对不要那样做。重新开始,使用ASP.NET身份,不要打扰编写自己的登录代码,因为这样做是错误的,并向用户开放了安全漏洞。