我有一个ASP.NET MVC视图,它使用jquery.Uploadify将文件发布到我的一个控制器上,以便在我的应用程序中使用,我注意到上传的一个副作用是当Flashify文件使用上传时将文件提交到我的控制器的服务器帖子,它从ASP.NET获取自己的SessionID。当然,如果我的上传控制器没有使用Session来存储当前用户上传的文件列表以供我的应用程序将来操作,那就没问题了......所以考虑到这个问题,我上传文件后在我的View中,当前用户的会话不包含刚刚发布的任何文件。
关于如何在不依赖Sessions(最好是没有数据库)的情况下实现我想要的任何建议?
答案 0 :(得分:2)
由于Uploadify纯粹是一个前端脚本,我不明白为什么它会从ASP.NET获得一个会话。我也不完全明白你的具体问题是什么。
如果您的问题是,一旦文件上传,用户无法在屏幕上看到它们,那么我建议找出显示独立于Uploadify的文件列表的方法。如果可以,让它与文件一起发送ID令牌,然后从数据库中获取显示列表所需的数据。
答案 1 :(得分:0)
也许是一个静态hashmap,哪个键是用户:客户端的ip? 该值将是您希望在不同会话中存储的任何对象。
答案 2 :(得分:0)
交叉检查的一件事 - 您是否通过在上传之前向其添加一些数据来使会话“实时”? ASP.NET重新生成会话,直到它在会话中有数据。
答案 3 :(得分:0)
这是我提出的解决方案。我没有做太多测试,但在我目前的场景中,它似乎是Session的可接受替代方案。我将使用Global.asax的Session_End / Session_Start来确保根据需要创建和删除行。
public class UserTable : Dictionary<string, Dictionary<string, object>>
{
public new object this[string key]
{
get
{
object value = null;
if (HttpContext.Current != null)
{
var sessionId = HttpContext.Current.Session.SessionID;
if (ContainsKey(sessionId) && base[sessionId].ContainsKey(key))
value = base[sessionId][key];
}
else
throw new Exception("No HttpContext present.");
return value;
}
set
{
if (HttpContext.Current != null)
{
var sessionId = HttpContext.Current.Session.SessionID;
if (!ContainsKey(sessionId))
Add(sessionId, new Dictionary<string, object>());
if (!base[sessionId].ContainsKey(key))
base[sessionId].Add(key, value);
else
base[sessionId][key] = value;
}
else
throw new Exception("No HttpContext present.");
}
}
public object this[string sessionId, string key]
{
get
{
object value = null;
if (ContainsKey(sessionId) && base[sessionId].ContainsKey(key))
value = base[sessionId][key];
return value;
}
set
{
if (!ContainsKey(sessionId))
Add(sessionId, new Dictionary<string, object>());
if (!base[sessionId].ContainsKey(key))
base[sessionId].Add(key, value);
else
base[sessionId][key] = value;
}
}
public void Add(string sessionId)
{
Add(sessionId, new Dictionary<string, object>());
}
public void Add()
{
if (HttpContext.Current != null)
Add(HttpContext.Current.Session.SessionID);
else
throw new Exception("No HttpContext present.");
}
public new void Remove(string sessionId)
{
base.Remove(sessionId);
}
public void Remove()
{
if (HttpContext.Current != null)
Remove(HttpContext.Current.Session.SessionID);
else
throw new Exception("No HttpContext present.");
}
}