问题描述:
某系统由两个独立的.Net站点Site1,Site2组成,Site1负责登陆,Site2负责业务。
用户在Site1登陆,将登陆信息放入Site1的Session中,当菜单导航到Site2时,需要根据Site1的Session判断用户是否已经登陆了,但是由于Session是独立的,Site2中无法读取Site1的Session。
解决方案:
可利用WebService Session达到共享Session的效果。有点类似于单点登陆。
WebService提供两个方法,如下:
[WebMethod(EnableSession=true)] public string SetSession(string logonid) { System.Web.HttpContext.Current.Session["logonid"] = logonid; return ""; } |
[WebMethod(EnableSession=true)] public string GetSession() { if(System.Web.HttpContext.Current.Session["logonid"] != null) { return System.Web.HttpContext.Current.Session["logonid"].ToString(); } else { return string.Empty; } } |
如用户在Site1登陆,设置WebService Session,
SrmWebSvc.SRM_loginCheck check = new SrmWebSvc.SRM_loginCheck(); check.CookieContainer = new CookieContainer(); Cookie cookie = new Cookie("ASP.NET_SessionId", Session.SessionID); cookie.Domain = "localhost"; check.CookieContainer.Add(cookie); check.SetSession(userName); |
当菜单导航到Site2时,可通过读取WebService Session以确定用户是否已经登陆过。
SRM.SrmWebSvc.SRM_loginCheck check = new SRM.SrmWebSvc.SRM_loginCheck(); check.CookieContainer = new CookieContainer(); Cookie cookie = new Cookie("ASP.NET_SessionId", Session.SessionID); cookie.Domain = "localhost"; check.CookieContainer.Add(cookie); string logonId = check.GetSession(); |