ログインしたユーザーIDを保存するためにセッション変数を使用していますが、このセッション変数は後でアプリケーションで使用され、アプリケーションの特定のフォームを表示/非表示にします。 これは正常に動作しており、ログインしたユーザーに基づいて、目的のフォームがメニューで有効/無効になります。 問題はシステムを使用しているときに突然他のユーザーのメニューと名前が表示されます。 :セッション変数の競合
User1 has access to forms a,b,c
と
User2 has access to forms x,y,z.
ときUser1
ログに、突然彼のフォームを使用してUser2
のと我々はそれが表示されるユーザー名を表示トップ画面上のフォームへのアクセスを取得しています logged in user as User2.
セッション変数の値が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;
}
あなたのコードに問題があるようです。しかし、[問題を再現できるコードや情報がある](// stackoverflow.com/help/mcve)しない限り、私たちは手伝ってはいけません。それ以外の場合、私たちはただ盲目的に推測しています。 – FrankerZ
セッション作成時のコードを表示し、使用する場所(フォーム) –
ここに私のコードがあります。以下のコードは、セッション変数に値を渡すログインフォームで使用されています – Shah