在我的应用程序中,每当用户登陆我的网站时,我会检查该用户的会话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? (或这样一段时间)
答案 0 :(得分:4)
很可能是多人通过路由器或代理服务器共享相同的连接。
答案 1 :(得分:2)
更多原因(在路由器/代理之后很可能是一个)为同一IP提供不同的会话ID
不同会话ID的另一组原因是基于未能在请求之间设置持久会话cookie:
有充分的理由为同一个用户获取同一sessionId的多个浏览器窗口(相同的“浏览器会话”中的选项卡,“使用Ctrl +单击在新窗口/选项卡中打开”)。您作为网站创建者必须决定是否要尝试强制执行“单一会话=单一窗口”策略或处理在同一会话中打开的可能多个窗口。在不同的选项卡中使用相同的会话ID时,我没有合理的方法来检测案例,特别是如果您必须支持GET请求(否则您可以将一些附加ID转储到隐藏字段中)。