2016-09-14 52 views
1

我應該使用實踐使用session_start()

session_start() 

if (session_id() == ""){ 
    session_start(); 
} 

,因爲我沒有記錯,如果沒有後者會有另一條錯誤消息? http://www.php.net/manual/en/function.session-status.php

對於版本PHP < 5.4.0

if(session_id() == '') { 
    session_start(); 
} 

兩者:

+0

爲什麼? 'session_start()'*創建*會話或*恢復*當前的會話。 – AbraCadaver

+0

您無法使用session_id()檢查會話狀態。它會告訴你一個會話是否從未被啓動,但是如果一個會話被關閉< 'session_write_close(); session_id()'仍然會給你一個會話ID,即使會話現在已經關閉並且對腳本有效「死」了。 –

回答

3

PHP> = 5.4.0

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

源的版本推薦方式這些應該適用於你所要求的。

1

我這樣做可以阻止會話劫持。然後在每個頁面的開始處調用該函數。

public function start_session() 
{ 
    session_start(); 

    if (rand(1, 10) == 5) 
    { 
     session_regenerate_id(); 
    } 
} 
+0

會話劫持意味着有人可以從您的PC上竊取cookie來模仿您? –

+0

是的,黑客可以猜測用戶的會話ID,或者如果連接不是https,則執行「中間人」攻擊,並向服務器顯示爲同一用戶。 –

0

由於PHP手冊州,session_create功能將創建一個新的會話,或者如果你已經創建了一個返回當前會話。所以不應該檢查是否有會話。 如果你仍然想檢查它,我建議使用Flux Coders方式。

1

好的做法是始終將session_start()置於代碼的開頭,無論您遇到什麼情況。

session_id() PHP官方文檔:)

SESSION_ID(返回爲當前會話或空字符串(「」),如果沒有當前的會話標識(沒有當前的會話ID存在) 。

這裏是你如何可以檢查一個已經存在的session_id()一個例子:

session_start(); 

if(empty(session_id())) { 
    session_id(); 
} 
從文檔

始終:

SESSION_ID()是用來獲取或設置會話當前會話的ID。