【发布时间】:2013-01-06 01:58:29
【问题描述】:
我正在使用 uploadify 上传文件,它们会自动发布到处理程序。然后,我在处理程序中修改会话,该处理程序已设置为网站公共类中的静态属性。然后我尝试在 aspx 页面中访问同一个会话,并且值为 null。我感觉这是因为 cookie,但需要有一种方法来解决这个问题,而不会在 url 中暴露 sessionid。
ASHX:
public class Upload : IHttpHandler, IReadOnlySessionState, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
...
CMSSession.Current.UploadedFiles.Add(fileName);
}
}
会话类:
public class CMSSession
{
public static CMSSession Current
{
get
{
CMSSession session = (CMSSession)HttpContext.Current.Session["__CMSSession__"];
if (session == null)
{
session = new CMSSession();
HttpContext.Current.Session["__CMSSession__"] = session;
}
return session;
}
}
public List<string> UploadedFiles { get; set; }
}
ASPX:
if (CMSSession.Current.UploadedFiles != null)
{
...
}
else
{
IT'S ALWAYS NULL
}
Web.Config:
<sessionState mode="InProc" cookieless="false" /> - causes session to always null in aspx when modified in ashx
<sessionState mode="InProc" cookieless="true" /> - session value is not null, but sessionid is exposed in the url
如何在不将 cookieless 更改为 true 的情况下访问和修改 ASHX 文件中的当前会话,然后从 ASPX 页面访问会话?
我尝试过使用 HttpContext 并使用传递给 ASHX 的上下文...没有任何效果。
与此问题相同,但必须有更安全的方法:session set in ashx and get that session on aspx
有什么想法吗?
【问题讨论】:
-
你访问的ASPX页面和ASHX页面是同一个域名吗?
-
我在本地主机上的开发中,所以是的。
-
嗯,很奇怪。我会查看 cookie 并查看路径是什么。也许 cookie 仅适用于单个页面或其他内容?
-
显然是浏览器问题。 IE复制sessionid到ashx,chrome,ff等都没有。
-
不,如果 cookie 对该路径有效,浏览器将发送它。如果您查看 HTTP 流量,它可能就在那里。试试 Win 的解决方案,看看是否可行。
标签: c# asp.net file-upload webforms ashx