作者 主題: 請教SESSION存活時間與清除機制問題  (閱讀 14271 次)

0 會員 與 1 訪客 正在閱讀本文。

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
各位前輩

小弟想 對一個網站而言,SESSION清除的時機應該有三個

1.登入驗證正常登出呼叫session_destory(),以php直接執行

2.在後端設定了一個計時器,偵測當使用者未動作超過多久後,去呼叫session_destory(),可用js處理計時器觸發呼叫php程式碼

3.當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊!

前面1. 2.點實做方式我大概已經了解處理邏輯,但是3.卻一直以來都沒辦法照需求設定,預設裝好的伺服器常常都是關閉後即使隔天在打開網站仍是登入狀態!

起初我懷疑是client端browser自身儲存cookie設為永久有效之類的關係,然後又想了應該是伺服器上php針對SESSION的設定參數要改,也看了一下apache下KeepAlive / KeepAliveTimeOut設定值...

我的需求是:當使用者非正常登出時,過了十分鐘後該session就失效!以下是我的相關設定

代碼: [選擇]
/etc/php.ini
session.use_cookies = 1
session.use_only_cookies = 1
session.gc_probability = 100
session.gc_divisor     = 100
session.gc_maxlifetime = 600
session.cookie_lifetime = 0

/etc/httpd/conf/httpd.conf
KeepAlive On
MaxKeepAliveRequests 10
KeepAliveTimeout 600

經過測試後,發現有個問題,這樣確實十分鐘後就失效!但是變成固定十分鐘後一定失效,即使改寫了session值還是一樣,我想是不是php內部有個紀錄這session時間戳記的值,而我應該如何去動態改寫這個值?

或者一般是說自己設一個時間戳記然後去變更,但是這樣做卻沒辦法處理3.的情況,要不然就是我忽略的哪個設定值要變動.... ???


ps附帶請教
代碼: [選擇]
; The path for which the cookie is valid.
session.cookie_path = /
; The domain for which the cookie is valid.
session.cookie_domain =

我對這兩個設定值作用不很了解,cookie應該是儲存在client端的數值,那麼設定cookie_path是影響在client端儲存的路徑嗎? 而domain是指屬於該domain的client端才可以使用cookie,其他以外的client端連線則無法使用cookie??

懇請前輩指教~~謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #1 於: 2009-09-14 16:53 »
樓主寫了一堆看的眼睛都花了  :D
以前都是用 session + cookie來做
判斷兩邊的資料

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #3 於: 2009-09-16 14:27 »
感謝回覆...

我看了micmic3 提供的資料,裡面他提到一段:

引用
現在做的項目使用 cookie 來保存用戶信息,每當 session.cookie_lifetime 設置為 0 的時候,理所當然 IE 被關閉後每次都要重新登陸。但是當將此設置為一定的值後,在指定的秒數內重新打開該頁面,仍舊保留以前的 cookie 數據並且自動登陸。

然後再請前輩們看一下我上面貼文提到的設定....我也是把session.cookie_lifetime設成0,但是重點是卻並沒有 理所當然 IE 被關閉後每次都要重新登陸。我用過IE、Firefox、Safari測試過,以為會不會瀏覽器也有關?但似乎不是

我現在著眼的在於 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊! 我寫的系統一直在這點處理上有點狀況

每次關掉browser後再次打開還是處於已登入狀態!

不知道前輩們都不會發生這樣的問題嗎??   個人以為讓Session資訊未正常登出存在於用戶端太久,感覺是個安全上的考量問題 ???

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #4 於: 2009-09-16 14:43 »
感謝回覆...

我看了micmic3 提供的資料,裡面他提到一段:

引用
現在做的項目使用 cookie 來保存用戶信息,每當 session.cookie_lifetime 設置為 0 的時候,理所當然 IE 被關閉後每次都要重新登陸。但是當將此設置為一定的值後,在指定的秒數內重新打開該頁面,仍舊保留以前的 cookie 數據並且自動登陸。

然後再請前輩們看一下我上面貼文提到的設定....我也是把session.cookie_lifetime設成0,但是重點是卻並沒有 理所當然 IE 被關閉後每次都要重新登陸。我用過IE、Firefox、Safari測試過,以為會不會瀏覽器也有關?但似乎不是

我現在著眼的在於 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊! 我寫的系統一直在這點處理上有點狀況

每次關掉browser後再次打開還是處於已登入狀態!

不知道前輩們都不會發生這樣的問題嗎??   個人以為讓Session資訊未正常登出存在於用戶端太久,感覺是個安全上的考量問題 ???

以前也常碰到 session 過期時間失效
我的主機有好幾個不同類型網站在跑
為了避免改了設定後會有不同的影響
php.ini 裡 session 的相關設定我只改方式與路徑
用 session + cookie 來處理登入登出問題
只要有一邊的登入狀態沒了, 便判定為登出

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #5 於: 2009-09-16 15:53 »
在php的定義中session跟cookie是不同的東西 (雖然都是透過HTTP協定中的cookie去實做)
簡單的說session只要是瀏覽器一關閉他就會失效不管你的lifetime設多少。
如果要達到你的目的
你必須使用cookie把目前的session id存起來
當user進入網頁的時候先檢查cookie的session id透過session_id()函數把cookie的session id指定回去就可以還原原先的session環境;


感謝回覆...

我看了micmic3 提供的資料,裡面他提到一段:

引用
現在做的項目使用 cookie 來保存用戶信息,每當 session.cookie_lifetime 設置為 0 的時候,理所當然 IE 被關閉後每次都要重新登陸。但是當將此設置為一定的值後,在指定的秒數內重新打開該頁面,仍舊保留以前的 cookie 數據並且自動登陸。

然後再請前輩們看一下我上面貼文提到的設定....我也是把session.cookie_lifetime設成0,但是重點是卻並沒有 理所當然 IE 被關閉後每次都要重新登陸。我用過IE、Firefox、Safari測試過,以為會不會瀏覽器也有關?但似乎不是

我現在著眼的在於 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊! 我寫的系統一直在這點處理上有點狀況

每次關掉browser後再次打開還是處於已登入狀態!

不知道前輩們都不會發生這樣的問題嗎??   個人以為讓Session資訊未正常登出存在於用戶端太久,感覺是個安全上的考量問題 ???
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #6 於: 2009-09-16 16:08 »
被 ricky 一說突然想到 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊!
實很怪照理說重開瀏覽器會是不同 seesion_id 才是
$_SESSION 自然也應沒資料

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #7 於: 2009-09-16 16:20 »

我也是認為,假設
引用
session只要是瀏覽器一關閉他就會失效
,那麼為何我直接關閉了瀏覽器再開,還是呈現登入狀態 ???

再加上
引用
被 ricky 一說突然想到 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊!
實很怪照理說重開瀏覽器會是不同 seesion_id 才是

不同session_id的話也不應該以舊的cookie儲存的id比對到之前登入的結果....

ricky前輩好像剛好誤解反了我的意思,我並不是要留著之前登入結果,而是去除之前登入結果...我目前的狀況是之前的登入資訊再關掉後還在!

感謝回應

ricky

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 669
    • 檢視個人資料
    • Ricky 碎碎唸
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #8 於: 2009-09-16 16:46 »
這個就得提到各家瀏覽器的行為了
Firefox對所有的視窗都只有一個session。也就是說不管你開了幾個視窗或是tab都是視為同一個session。相對的只要你有一個firefox的視窗還在執行中,那個session也一直存在。
IE不同視窗視為不同session,但是同一個視窗底下不同的tab則視為同一個session。

所以樓主還是自己用不同瀏覽器作一下實驗看問題是出在php還是瀏覽器嘍。


我也是認為,假設
引用
session只要是瀏覽器一關閉他就會失效
,那麼為何我直接關閉了瀏覽器再開,還是呈現登入狀態 ???

再加上
引用
被 ricky 一說突然想到 當使用者未登出自行關閉瀏覽器時,在一段時間後應清除掉儲存的SESSION資訊!
實很怪照理說重開瀏覽器會是不同 seesion_id 才是

不同session_id的話也不應該以舊的cookie儲存的id比對到之前登入的結果....

ricky前輩好像剛好誤解反了我的意思,我並不是要留著之前登入結果,而是去除之前登入結果...我目前的狀況是之前的登入資訊再關掉後還在!

感謝回應
我的symfony作品:YOMOpets 寵物誌
有興趣可以一起來討論symfony喔
我的部落格:http://ricky.ez2.us/

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 請教SESSION存活時間與清除機制問題
« 回覆 #9 於: 2009-09-17 09:05 »
這個就得提到各家瀏覽器的行為了
Firefox對所有的視窗都只有一個session。也就是說不管你開了幾個視窗或是tab都是視為同一個session。相對的只要你有一個firefox的視窗還在執行中,那個session也一直存在。
IE不同視窗視為不同session,但是同一個視窗底下不同的tab則視為同一個session。
這個部份我記得是一樣的....firefox 不同 tab 視為同一個 session
但再開一個視窗是不同的  session