来自同一IP的不同会话ID同时出现

时间:2012-10-03 15:43:11

标签: c# session

在我的应用程序中,每当用户登陆我的网站时,我会检查该用户的会话ID并插入数据库(包括所有详细信息ip,浏览器等)到数据库,如果它的会话ID不同

string sessionId = HttpContext.Current.Session.SessionID;
if (objDB.checkDuplicate("session", "sessionId", sessionId))
{
    // code to make insert in database
}

但是在检查数据库时,我会同时从同一IP中多次插入

有人可以解释为什么会这样吗?

注意:用户的SESSION不同,因此checkDuplicate()工作正常,但用户如何同时拥有不同的会话ID? (或这样一段时间)

2 个答案:

答案 0 :(得分:4)

很可能是多人通过路由器或代理服务器共享相同的连接。

答案 1 :(得分:2)

更多原因(在路由器/代理之后很可能是一个)为同一IP提供不同的会话ID

  • 重新启动浏览器将为同一用户创建新的会话ID(只要在会话cookie中设置)
  • 打开单独的浏览会话(即IE的正常与私有,取决于配置和浏览器标签可被视为单独的会话)
  • 同一台计算机上的不同用户

不同会话ID的另一组原因是基于未能在请求之间设置持久会话cookie:

  • 我认为如果没有写入ASP.Net会话状态cookie可以在每个请求上重新生成(需要验证)
  • 可以禁用cookie(很少见,但可能)
  • 可以阻止cookie(即IFrame中的页面/图像缺少P3P策略)或浏览器中的其他策略

有充分的理由为同一个用户获取同一sessionId的多个浏览器窗口(相同的“浏览器会话”中的选项卡,“使用Ctrl +单击在新窗口/选项卡中打开”)。您作为网站创建者必须决定是否要尝试强制执行“单一会话=单一窗口”策略或处理在同一会话中打开的可能多个窗口。在不同的选项卡中使用相同的会话ID时,我没有合理的方法来检测案例,特别是如果您必须支持GET请求(否则您可以将一些附加ID转储到隐藏字段中)。