2017-06-29 59 views
0

我使用会话变量来存储登录的用户ID,此会话变量稍后在应用程序中用于显示/隐藏应用程序中的某些表单。 这工作正常,并基于登录的用户在菜单中启用/禁用所需的形式。 有时在使用系统时突然出现其他用户的菜单和名称,例如:会话变量冲突

User1 has access to forms a,b,c

User2 has access to forms x,y,z.

User1登录并使用他的形式突然有可以访问的User2和我们展示它显示的用户名上屏的形式: logged in user as User2. 我认为这是因为session变量的值为User2。两个用户都使用不同的客户机。

请告知如何解决这个问题。
以下代码在登录表单中用于收集会话变量的值。

var objUser = con.PR_Login(txtUser.Text, txtPass.Text); 
       foreach(var user in objUser) 
       { 
        //HdnuserType.Value=user. 
        string ENCRYPT_VALUES = user.UserID + "|" + user.UserName + "|" + user.UserRole + "|" + user.CompID + "|" + "|" + user.DeptID + "|" + "|" + user.CntrID + "|" + user.CompanyName; 
        ENCRYPT_USER_DTL=ENDE.Encrypt(ENCRYPT_VALUES); 

        Session["EN_USER_DTL"] = ENCRYPT_USER_DTL; 
        Session["UserId"] = user.UserID; 
        Session["LOGINNAME"] = user.UserName; 
        Session["UserRole"] = user.UserRole; 
        Session["CompID"] = user.CompID; 
        Session["CntrID"] = user.CntrID; 
        Session["DeptID"] = user.DeptID; 
        Session["CompName"] = user.CompanyName; 
        HdnuserType.Value = user.UserRole; 
        Session["EmailID"] = user.Email; 
        s_CompID = Convert.ToInt32(user.CompID); 
        s_UserName = user.UserName.ToString(); 
       } 

These variables are checked in the masterpage, accordingly the menus are displayed 

ENCRYPT_VALUE = Login.ENCRYPT_USER_DTL.ToString(); 
        DECRYPT_VALUE = ENDE.Decrypt(ENCRYPT_VALUE.ToString()); 
        string[] USER_DETAILS = DECRYPT_VALUE.ToString().Split(new char[] { '|' }); 
        txtusername.Text = USER_DETAILS[1].ToString(); 
        if (USER_DETAILS[2] == "Sadmin") 
        { 
         sadminmenu.Visible = true; 
        } 
        if (USER_DETAILS[2] == "Admin") 
        { 
         adminmenu.Visible = true; 
        } 
+1

看来你的代码有问题。但是,除非我们有[可以重现问题的代码或信息](// stackoverflow.com/help/mcve),否则我们无能为力。否则,我们只是盲目猜测。 – FrankerZ

+1

显示会话创建时的代码以及它在哪里使用(表单) –

+0

这里是我的代码,下面的代码用于登录表单,我从中获取值到会话变量 – Shah

回答

0

据你所说,User1和User2的值可能是存储在静态变量中的。你应该检查或调试问题。

最好,thanhnt