【问题标题】:ASP.net Associate session with client/request based on ipASP.net 基于 ip 将会话与客户端/请求关联
【发布时间】:2010-03-18 08:25:12
【问题描述】:

在一个网页中,我们使用了 flash 上传控件,但由于上传事件中的 flash 错误,会话丢失,因为它与新会话一起回发。

我们不得不使用带有 ip 和旧会话 id 的表或带有旧会话 id 的查询字符串,以便在上传的事件中重新评估它...

知道旧的会话 ID 我如何将其重新分配给客户端? (在 C# 中)

【问题讨论】:

  • 您是指存储在 HTTPSession 中的数据还是身份验证会话 (cookie)?
  • 肯定知道会话 ID 无济于事,因为您仍然会丢失丢失会话中的数据...?
  • 理论上问题在于客户端请求从闪存发出的方式将客户端识别为新客户端,因此给它一个新会话......但旧会话不会被删除(仅由无论如何超时)
  • 对不起,我对控件一无所知 - 你如何告诉它上传到哪里?它不允许您配置任何可以识别会话的参数吗?这可能是设计使然,控件可能无法访问表单身份验证 cookie(这可能是件好事!)
  • 它是在完成上传后回发到页面的控件。而且它不是设计为它在 adobe 错误跟踪列表中列出的错误...bugs.adobe.com/jira/browse/FP-1044bugs.adobe.com/jira/browse/FP-419bugs.adobe.com/jira/browse/FP-201bugs.adobe.com/jira/browse/FP-78

标签: asp.net flash session upload swfupload


【解决方案1】:

用于跟踪用户身份:

URL(查询字符串中的唯一标记)?即在 URL 中使用自己的令牌将每个访问者重定向到同一页面。

饼干?

用于跟踪相关数据:

也许然后将这个用户特定的数据存储在应用程序级存储中(如上以用户令牌为键),例如Application 对象。当然,您应该关心这些数据的生命周期,并应该考虑将其持久化到磁盘或数据库中。

更新

This (from the swfupload project) 看起来像是解决此处描述的问题的方法...

或者您可以只使用该工具而不是当前的上传控件?...

【讨论】:

  • 我唯一的问题是丢失了用户与其会话之间的关系,因为 Flash 错误。我拥有使用 asp.net 会话变量所需的所有数据。
  • 听起来控件正在发出它自己的请求,并且尚未构建以传回身份验证cookie。我会考虑在管道的早期捕获 HTTP 请求(一个 HTTPModule 或 Global.asax 中的一些处理),并在知道它是什么用户后使用查询字符串中的一些数据来手动验证请求。
  • 看来你说到点子上了...去测试一下,如果有效,请检查您的... :)
  • 有一个问题...flash控件发布的请求也省略了查询字符串... :S 我们正在考虑使用 Request.ServerVariables["REMOTE_HOST"] + Request.ServerVariables[ "LOGON_USER"] 在哈希表中恢复其会话 id...但是如果有人知道更好的方法,那将是首选...
【解决方案2】:

不起作用。该 IP 可能会隐藏许多用户 - 请记住,有些人有时会不自觉地通过 NAT 设备(他们的 ISP 强制执行它,例如卫星提供商),因此您可能有 X 个用户使用相同的 IP。

【讨论】:

  • 并在上传前在查询字符串中传递会话ID?
  • 查看我的更新 - 看起来它类似于 HttpContext.Current.Request.Cookies.Add() 或 Cookies.Set() 以及您从请求中提取的数据...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多