2012-10-03 169 views
2

在我的應用程序中,每次用戶登錄我的網站時,我都會檢查該用戶是否具有會話ID,並向數據庫中插入(包含所有詳細信息ip,瀏覽器等) 如果它有不同的會話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? (或這樣的時間範圍)

+1

可能是因爲他們沒有接受cookie,每次他們訪問一個頁面時都是新的會話?或者由他們的防火牆造成的類似情況 – aserwin

+0

1 IP地址!= 1用戶 –

+0

@aserwin:如果是這樣的話,會話(時間段)內的用戶唯一性怎麼辦? – Champ

回答

4

很可能是多人通過路由器或代理服務器共享相同的連接。

+2

或多個瀏覽器選項卡/窗口來自一個用戶,這取決於瀏覽器(是的它不同,我曾經檢查經驗) – tomfanning

+0

不可能的,因爲我幾乎每個第三用戶和我如果每個選項卡都不相同,請不要認爲那麼多用戶在路由器 – Champ

+0

後面使用我的網站...你會建議在會話中檢查用戶唯一性 – Champ

2

更多的原因(即路由器後面/代理是最有可能的一種)有不同的會話ID爲同一IP

  • 重新啓動瀏覽器將會使新的會話ID爲相同的用戶(只要它是在會話設置餅乾)
  • 開口分開瀏覽會話(即正常與私有爲IE,根據配置和瀏覽器標籤可以被視爲單獨的會話)
  • 不同的用戶在同一計算機上

另一組的原因不同的會話ID是基於故障設置堅持請求之間的會話cookie:

  • 我想,如果沒有寫入ASP.Net會話狀態cookie可以在每次請求的再生(需要以驗證)
  • cookie可能被禁用(罕見,但可能)
  • cookie可能被阻止(即缺乏對IFrame的網頁/圖片P3P策略),或在瀏覽器中的一些其他政策的

有正當的理由得到了同樣的sessionId多個瀏覽器窗口爲同一用戶(在相同的「瀏覽器會話」選項卡,「在新窗口/標籤中打開「,按住Ctrl並單擊)。您作爲網站創建者必須決定是否要嘗試執行「單一會話=單個窗口」策略或處理在同一會話中打開的潛在多個窗口。我知道在不同的選項卡中使用相同的會話ID時,檢測大小寫的方式並不合理,特別是如果您必須支持GET請求(否則您可以將一些附加ID轉儲到隱藏字段中)。