2014-12-04 50 views
3

我在session_id()上遇到問題,每次在瀏覽器刷新/重新啓動時都會返回一個新值。PHP session_id在刷新時重新生成

閱讀此篇here但它並沒有解決issue.I做過的一切提到有 - 瀏覽器接受cookie,權限設置是否正確,沒有參數值的方式是在連續的請求改變等

莫非這被稱爲不正確使用session_name()session_set_cookie_params()?或者,也許這是應該進行微調的初始配置?

public static function init_session($name = FALSE, $lifetime = 10, $path = '/', $domain = FALSE, $secure = FALSE) 
{ 
    if (empty($name)) 
    { 
     $name = APP_NAME; 
    } 

    if (empty($domain)) 
    { 
     $domain = BASE_URL; 
    } 

    session_name($name); 

    session_set_cookie_params($lifetime, $path, $domain, $secure, TRUE); 

    session_start(); 

    echo session_id(); 
} 
+0

我想你貼錯了鏈接,我沒有看到相對於CSS3問題。 – 2014-12-04 09:07:32

+0

@MarcelBurkhard對不起,現在修復。 – sitilge 2014-12-04 09:09:41

+0

註釋對'session_name()'和'session_set_cookie_params()'的調用,看它是否有效。如果有效,則取消註釋兩個電話中的一個,再次檢查等等。當它停止工作時,你已經找到了問題。 – axiac 2014-12-04 09:16:46

回答

1

首先,您將會話有效期10秒,這意味着你每10秒後,一個新的會話。

備註:某些瀏覽器在關閉瀏覽器時丟棄會話cookie屬於正常行爲。

如果您需要將會話擴展到多個瀏覽器會話,則需要使用永久性Cookie

例子:

function init_session(/* ... */) 
{ 
    if(!isset($_SESSION)) { 
     session_start(); 
    } 
    //Is it a running session? 
    if(isset($_SESSION['somevalue'])) { 
     //Everything is fine, session is loaded, no need to reload from cookies 
    } else { 
     if(isset($_COOKIE['yourcookiename'])) { 
      //reload session from cookie 
     } else { 
      create_session(); 
     } 
    } 
} 

function create_session() 
{ 
    $_SESSION['somevalue'] = 1; 
    //setcookie 
} 

http://www.allaboutcookies.org/cookies/cookies-the-same.html

+2

副作用:瀏覽器本身不會關閉會話,因爲在關閉頁面選項卡時,瀏覽器不會與服務器通信。關閉本身在超時後發生在服務器端(因此,當用戶的瀏覽器沒有請求X秒時,會話關閉)! – Sliq 2014-12-04 09:28:22

+0

@Sliq thx,我相應地更改了我的答案 – 2014-12-04 09:30:56

+0

@MarcelBurkhard是的,但即使時間間隔較短,session_id也會在每個請求中更改。不知何故,'生存時間'被忽視。 – sitilge 2014-12-04 09:42:09