我有一个网站,其中我必须制作默认路径,对于asp.netSessionId cookie通常显示为“/”,并且出于安全原因而将.ASPXAUTH cookie显示为特定应用程序,并且经过大量RND我能够做到这一点但我有一个混乱和一个问题现在描述如下:
令人困惑的是:为了使cookie路径应用程序具体化,我写了一个方法说“setcookiepath”这样做并从全局文件的session_start中调用该方法,但是这个方法不能用作以前的路径在某些点击之后的某个时间重置,或者使用默认路径生成一个以上的cookie,而使用特定于应用的路径生成其他cookie。所以我继续从global.asax文件中的其他事件中逐个调用我的方法,并最终从每个事件调用,但它仍然只在有时工作。然后我在Session_Start中放弃了会话,这是第一次使用我在application_start中设置的标志调用Application时,在session_start中放弃会话后重置。这次它完美无缺。现在,我尝试从setcookiepath删除不必要的调用并测试这次它在任何事件中使用单个方法调用,甚至在删除放弃会话的逻辑之后它现在正在工作。我很困惑什么是正确的方法?
问题是:虽然现在我的代码正在为网站工作但是有一个管理模块从该网站的子文件夹中调用。对于这个Admin子模块,我的代码不起作用,即我面临的问题是。我第一次点击URL时可以登录Admin模块,为ASP.NetSessionId生成2个带有默认路径的cookie,另一个具有应用程序特定的路径。只要我的浏览器处于打开状态,当我关闭浏览器并尝试重新登录时,这就有效,现在我的前一个会话cookie被删除了,并且我一直被重定向到登录页面,因为当我从登录重定向时,用户会话在某个地方之间失效管理模块的主页页面,主网站模块中没有出现此问题。此外,从global.asax.cs文件中删除路径重置逻辑后,管理模块会话在登录和主页之间正常工作。
请帮忙。
路径集的代码是:
public void setCookieApp()
{
if (HttpContext.Current != null)
{
/// only apply session cookie persistence to requests requiring session information
if (HttpContext.Current.Handler is IRequiresSessionState || HttpContext.Current.Handler is IReadOnlySessionState)
{
SessionStateSection sessionState = (SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
string cookieName = sessionState != null && !string.IsNullOrEmpty(sessionState.CookieName) ? sessionState.CookieName : "ASP.NET_SessionId";
string cookieName1 = sessionState != null && !string.IsNullOrEmpty(sessionState.CookieName) ? sessionState.CookieName : ".ASPXAUTH";
//System.TimeSpan timeout = sessionState != null ? sessionState.Timeout : TimeSpan.FromMinutes(20);
/// Ensure ASP.NET Session Cookies are accessible throughout the subdomains.
if (HttpContext.Current.Request.Cookies[cookieName] != null)
{
//Response.Cookies[cookieName].Value = Session.SessionID;
HttpContext.Current.Response.Cookies[cookieName].Path = HttpContext.Current.Request.ApplicationPath;
//Response.Cookies[cookieName].Expires = DateTime.Now.Add(timeout);
}
if (HttpContext.Current.Request.Cookies[cookieName1] != null)
{
//Response.Cookies[cookieName].Value = Session.SessionID;
HttpContext.Current.Response.Cookies[cookieName1].Path = HttpContext.Current.Request.ApplicationPath;
//Response.Cookies[cookieName].Expires = DateTime.Now.Add(timeout);
}
}
foreach (string k in HttpContext.Current.Request.Cookies.AllKeys)
{
if (k.ToString().Contains("ASP.NET_SessionId"))
{
HttpContext.Current.Response.Cookies["ASP.NET_SessionId"].Path = HttpContext.Current.Request.ApplicationPath;
}
else if (k.ToString().Contains(".ASPXAUTH"))
{
HttpContext.Current.Response.Cookies[".ASPXAUTH"].Path = HttpContext.Current.Request.ApplicationPath;
}
}
}
}