PDA

View Full Version : ایجاد Session منحصربفرد و یکتا در کل صفحات برای کاربر



Developer Programmer
سه شنبه 04 اسفند 1394, 03:00 صبح
من یه سیستم تحت وب نوشتم که وقتی کاربر لاگین کرد، براش یه [user]Session می سازم و در تمامی صفحات سیستم، سطح دسترسی و نام کاربری رو از اون Session می خونم.
گاهی کاربران، ناشیانه چندین TAB در فایرفاکس باز میکنن و در هرکدوم جداگانه و با نامهای کاربری مختلف لاگین میکنن و اینطوری، سشن ها و سطح دسترسی کاربرها در صفحات، روی هم می افته و باعث ایجاد Conflict شدید Data می شه.

چه راه کاری پیشنهاد میکنین تا بتونم در لحظه ی لاگین کاربر، یک مقدار یکتا مثل GUID تولید کنم و در تمام صفحات مقدار GUID رو کنترل کنم؟

Davidd
سه شنبه 04 اسفند 1394, 04:43 صبح
وقتی کاربر لاگین که کرد که دیگه نباید بتونه وارد صفحه لاگین بشه. صفحه لاگین فقط باید برای کاربرایی که لاگین نکردن نمایش داده بشه.
مورد دیگه اینکه وقتی یه سشن برای کاربر ساخته میشه خود ASP یه GUID تولید میکنه و به عنوان کوکی در سیستم مشتری ذخیره میکنه بنابراین اگه کاربر با یوزر دیگه لاگین کنه GUID جدیدی تولید میشه یعنی مشتری نمی تونه همزمان با دو یوزر همزمان در یک مرورگر کار کنه. اینکه سشن و سطح دسترسی روی هم می افته قابل درک نیست بیشتر توضیح بدین.

Developer Programmer
سه شنبه 04 اسفند 1394, 06:02 صبح
وقتی کاربر لاگین که کرد که دیگه نباید بتونه وارد صفحه لاگین بشه. صفحه لاگین فقط باید برای کاربرایی که لاگین نکردن نمایش داده بشه.
دوست عزیز!
کاربر چند تا Tab باز میکنه و در هرکدوم،از طریق صفحه ی لاگین، با نام کاربری جدیدی وارد میشه.
مثلا در یک تب، با نام کاربری Admin و در تب دیگه با نام کاربری Guest؛
اینطوری میتونه در Tab های مختلف، با نام کاربری Guest ، کارهای Admin رو انجام بده.


وقتی یه سشن برای کاربر ساخته میشه خود ASP یه GUID تولید میکنه و به عنوان کوکی در سیستم مشتری ذخیره میکنه بنابراین اگه کاربر با یوزر دیگه لاگین کنه GUID جدیدی تولید میشه یعنی مشتری نمی تونه همزمان با دو یوزر همزمان در یک مرورگر کار کنه
اگه کد تست شده دارید. لطفا بذارید.

من تا اینجا پیش رفتم که سعی کنم هربار SessionID جدید تولید کنم. منتها در صفحات دیگه چیزی برای کنترل جدید یا قدیمی بودن Session["user"] ندارم

کد صفحه ی اول برای تولید IDجدید:

public partial class WebForm1 : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Session.Abandon();
//create new sessionID
SessionIDManager manager = new SessionIDManager();

manager.RemoveSessionID(System.Web.HttpContext.Cur rent);
var newId = manager.CreateSessionID(System.Web.HttpContext.Cur rent);
var isRedirected = false;
var isAdded = true;
manager.SaveSessionID(System.Web.HttpContext.Curre nt, newId, out isRedirected, out isAdded);


System.Web.HttpContext.Current.Response.Redirect("WebForm2.aspx",true);
}

}
}

کد صفحه ی لاگین:

public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Container sessionContainer = new Container
{
Username = Guid.NewGuid().ToString(),
UniquieID = HttpContext.Current.Session.SessionID
};

System.Web.HttpContext.Current.Session["user"] = sessionContainer;


System.Web.HttpContext.Current.Response.Redirect("WebForm0.aspx", true);

}
}


کدصفحه ی سوم بری تست منحصر بفرد بودن هر سشن و هرکاربر
public partial class WebForm3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Container sessContainer = (Container) System.Web.HttpContext.Current.Session["user"];
if (sessContainer == null) return;
lblUniqueID.Text = sessContainer.UniquieID;
lblUsername.Text = sessContainer.Username;
lblcurrentcontextID.Text = System.Web.HttpContext.Current.Session.SessionID;
}

}

malloc
سه شنبه 04 اسفند 1394, 07:01 صبح
شما کار ساده ای که میتونید انجام بدید اینه که توی لود صفحه لاگینتون چک کنید که اگه سشنی وجود داشت redirect کنه به صفحه مورد نظر(یعنی صفحه ای که کاربر بعد لاگین میره توش) یعنی دیگه کاربر نمیتونه توی یه مرورگر وقتی لاگین کرده و داخل سیستم هست صفحه لاگین رو ببینه