台灣最大程式設計社群網站
線上人數
909
 
會員總數:241346
討論主題:186911
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 舊session 被新使用者抓的
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
舊session 被新使用者抓的
價值 : 50 QP  點閱數:702 回應數:17

樓主

namehomegou
初學者
90 59
3134 188
發送站內信

各位大大
我有一個行之有年的系統,user打完帳號密碼後,會show 某某某歡迎字眼
但現在常有user反映他剛上網站首頁還沒登入打帳密前,就看到別人的姓名在他電腦上
好像用chrome瀏覽的,比較會發生此事
我有用session("姓名")應該是timeout user又不按登出來 session.abanden ,如何作呢
謝謝


搜尋相關Tags的文章: [ session ] , [ timeout ] ,
本篇文章發表於2017-05-08 07:42
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

彩虹
檢舉此回應
1.
同一台電腦才會發生

2.
這跟瀏覽器沒有太大的關係

3.
請確認到底使用者有沒有做登出的動作
名字如果還秀在上面,但是卻有登入表單
那表示上一個使用者其實已經登出,但是你沒有把 SESSION 清乾淨 (名字忘記清空)
不然沒登出狀況下,甚至能看到帳號資訊吧

就像如果在這台電腦上登入Facebook,離開時若不登出,那麼下一個人來使用電腦時
上一人的Facebook就會被看光光

結論:
1.上一個使用者沒做登出,然後session timeout還沒過期,這沒辦法避免,上一個使用者自己不做登出,只能等timeout到期

2.登出的狀態下,還看到名字,大概是因為SESSION沒清乾淨

3.最後大概只剩下一個對策,就是你要自己做一個五分鐘沒有動作,跳出自動登出訊息
不知道你有沒有使用網路銀行會不斷確認你是不是在電腦前,大概每過幾分鐘就會跳出訊息框,問你是要繼續使用網路銀行,或自動登出
這就是避免使用者忘記登出




本篇文章回覆於2017-05-08 08:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

namehomegou
檢舉此回應
目前聽到的有從自己手機發生的,故可確定不同電腦

做一個五分鐘沒有動作,跳出自動登出訊息
請問用到哪個指令
謝謝
本篇文章回覆於2017-05-08 08:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

彩虹
檢舉此回應
不可能吧...
請您務必確認

session 在不同電腦、瀏覽器、手機下通常是不能互通的阿

我用我的電腦登入你的網站,然後別人用自己的電腦瀏覽網站時竟然看到我的名字??


這已經不是上一個使用者有沒有登出的問題了,而是靈異事件,這很恐怖吧
如果有100個人登入,顯示又會是誰的名字?


你可能要了解一下session是如何運作的
不可能發生這種事情...



本篇文章回覆於2017-05-08 10:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

彩虹
檢舉此回應
說個笑話

我在我電腦登入Facebook,然後不登出
你在你電腦瀏覽Facebook網站,看能不能看到我的名字


請您提供提供一下你首頁的部分程式碼,也許是哪邊有誤 = =

搞不好程式碼你是寫如果session("姓名")不存在,就顯示 "劉德華"

劉德華 歡迎

本篇文章回覆於2017-05-08 10:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

namehomegou
檢舉此回應
大大
user 當場給我看手機,我也嚇一跳

Partial Class MasterPage
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then
Exit Sub
End If
Label支苑學苑中文.Text = Session("支苑學苑中文") & "研討班回報系統"
TextBox姓名.Text = Session("承辦人中文")
Call set_menu()
End Sub


Partial Class 登入
Inherits System.Web.UI.Page
Protected Sub Button確定_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button確定.Click
TextBox帳號.Text = CleanInput(TextBox帳號.Text)
TextBox密碼.Text = CleanInput(TextBox密碼.Text)

Using dr1 As IDataReader = CType(SqlDataSource承辦人.Select(DataSourceSelectArguments.Empty), IDataReader)
If dr1.Read Then
If TextBox密碼.Text = dr1("密碼").ToString Then
Session("承辦人中文") = dr1("承辦人中文").ToString
Server.Transfer("default.aspx")
End If ' TextBox密碼.Text
End If 'dr1.Read
End Using 'dr1

Dim errmsg As New Literal
errmsg.Text = "<script>alert('帳號密碼不配')</script>"
Page.Controls.Add(errmsg)
End Sub


這是我的 code
本篇文章回覆於2017-05-08 11:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

史努比
檢舉此回應
session都是每台電腦, 甚至是每個瀏覽器獨立運作的,

原理是當client首次連到主機時, 都會發布一個獨一無二的session_id給client端瀏覽器,

得到id後, 在一定的時間內瀏覽器每次發出request, 都會帶著這組session_id去找server, 並透過這組session_id,

來存取SERVER上的個人session資訊, 也就是說只要有另一個client用了一樣的session_id向server發出request,

就會在不同電腦, 看到一樣的session內容, 所以問題有可能出在你們專案裡有人自訂了session_id的配發方式,

不同的client端但卻分配到了相同session_id, 您可以朝這方面查找是否有上述情況。
本篇文章回覆於2017-05-08 18:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

MIS2000 Lab
檢舉此回應
彩虹 & 史努比網友的說法有道理

原PO見到的Bug,除非您可以 "重現" 當時狀況給大家看一下
不然的話....... 我只能猜測,您完全不理解 Session的生命週期與運作
可以參閱我這則影片 https://www.youtube.com/watch?v=HifbJHQcR-0

我注意到:您使用 MasterPage,可能的問題出現在此
如果您不使用 MasterPage,使用單純的ASP.NET網頁,或許可以試試看
還會不會出現您說的狀況 ??


再來,程式碼的檔名與類別名稱、控制項的ID....等等,
如果可以的話,用 "英文" 命名吧。

也不要為 SqlDataSource控制項來手寫程式,這是一個控制項,只有網頁能用上
要寫程式連結資料庫CRUD,就寫ADO.NET或是LINQ、EF等等

不要為SqlDataSource寫程式,請看我的影片說明
https://www.youtube.com/watch?v=tnGqKV4F_Pk&t=22s

https://www.youtube.com/watch?v=P7AKhH-9YrE&t=5s


最後,建議您輸出 JavaScript不要透過 Label or Literal
比較正規的作法是 (ClientScriptManager.RegisterStartupScript 方法)
http://mis2000lab.blogspot.tw/2016/12/google-charts-with-javascript2aspnet.html

希望對您有幫助 :-)
本篇文章回覆於2017-05-08 21:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
還蠻奇怪的現象

建議,搜一下是否有用Cookie來記錄使用者資訊
或者,有這樣狀況的,清一下Cookie看看

^.^a
本篇文章回覆於2017-05-08 22:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

namehomegou
檢舉此回應
MIS2000 Lab 建議-------------- 您使用 MasterPage,可能的問題出現在此 ?????????????
我有懷疑過,但依 彩虹 史努比 強調再怎樣也不可能在不同電腦發生
masterpage怎可能
???
本篇文章回覆於2017-05-09 05:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
最有價值解答

彩虹
檢舉此回應
我也爬了一些文,這機率真的不太可能阿

目前有多少人反映,還是這是個案
又或者說這發生機率極低的狀況下,你可以考量一下成本看是要追根究柢,還是放水流
因為你提到這是「行之有年的系統」,我也有去看一下你們的網站,覺得可以翻新一下
(在未登入的情況下,為什麼會有登出按鈕? XD)

你看要不要非尖峰的時間下,關閉 IIS,一段時間後再重啟 (例如半夜)
或者網站翻新



他的手機有給上一個使用者登入過嗎?
因為不管是cookie或session有沒有清掉
起碼要有人在同一個裝置、電腦下登入過,才會把這些資訊存到cookie或session


我覺得你要向跟你反映user再次確認狀況,並且詢問是否有給別人登入過




如果真的SessionID被共用的話,且電腦沒有讓其他使用者登入過的情況下,我覺得你可以多加上一個判斷
1.當使用者登入成功後,抓取使用者的目前使用的IP Address,放到session("UserIP")裡面

2.然後在每個頁面判斷,當session("UserIP")不等於現在使用的IP,就做登出
if session("UserIP")<> Request.ServerVariables("REMOTE_ADDR") then
  清空session裡的名字、帳號、密碼....
end if

我想這樣子應該就能解決了 (如果真的向server端取到一樣的SessionID....)

取得同樣資訊的狀況下
session("UserIP") 會是上一個使用者的IP
Request.ServerVariables("REMOTE_ADDR") 會是現在使用者的IP

兩個對應不起來就登出吧....












本篇文章回覆於2017-05-09 08:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

asp小菜渣
檢舉此回應
確定只有session的問題嗎?
既然行之有年,最近是否有人做任何異動?

會造成這問題還有一個可能性…您是否有使用靜態變數(static)?
本篇文章回覆於2017-05-09 11:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

史努比
檢舉此回應
我在#6想表達的是: 不同電腦如果看到相同的session內容, 代表二台電腦可能取到相同的session id了

session_id的發行方式是可以自訂的 system.web.sessionstate.sessionidmanager

找找看你的專案裡有沒有類似的程式在改變session id 的派發方式。
本篇文章回覆於2017-05-09 12:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

風箏
檢舉此回應
CType(SqlDataSource承辦人.Select(DataSourceSelectArguments.Empty), IDataReader)
請確定這段
會不會是抓到了另一個使用者的帳號了
本篇文章回覆於2017-05-10 09:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

風箏
檢舉此回應
如果還有辦法重現的話
下面這些程式碼寫個LOG檔把抓到的相關資訊記錄下來比對是不是資料都正確

Using dr1 As IDataReader = CType(SqlDataSource承辦人.Select(DataSourceSelectArguments.Empty), IDataReader) <=查詢的SQL是什麼
If dr1.Read Then
If TextBox密碼.Text = dr1("密碼").ToString Then
Session("承辦人中文") = dr1("承辦人中文").ToString <=抓回來的承辦人中文是什麼

本篇文章回覆於2017-05-10 09:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其本上會發生這樣的事。大多數是程式內有做了如下的動作才有可能

1.有運用指定session id的方式來切換session
一般來說最好不要這樣做,讓系統去自動產生指定會比較好

2.有運用了特殊的session id來做key的方式,如db session之類的東西
一般如果只是直存session id的話。影響不大。但有些會再透過特別的編碼重存id。
而編碼的計算模式有機會重覆的情況

3.非常高量的並發量,且過期時間設的很長(如1天)
在在臨床實驗中,我本人的確有遇到過這樣的情況。
該客戶網站約一天有將近3~5萬人登入。且session的過期時間設定了3天
就曾經發生過,原本登入a,不知道為何變成b身份的情況。(session id居然衝突重覆了,百思不得其解)
不過該情況是約3個月發生1次。
後期我建議他們將session過期時間改為1個小時。就沒在發生過了

4.緩存~~~~~這緩存一般來說又區分了客戶端緩存及伺服端的頁面緩存。
其實這個情況跟第2點會比較相似的情況。


以上這些看看是否有觸犯到了。有的話的確是有那個可能性沒錯。
本篇文章回覆於2017-05-12 16:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   

回覆
如要回應,請先登入.