2015-08-29 70 views
0

我有一個PHP腳本,它將收據返回給在我的網站上購買的客戶。當他們收到收據時,我希望能夠開始新的會話。到目前爲止,我在腳本結尾處有一段代碼,它返回收據頁面。它是:PHP會話有時無法重新啓動

if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), 
    '', 
    time() - 42000, 
    $params["path"], 
    $params["domain"], 
    $params["secure"], 
    $params["httponly"] 
    ); 
} 

session_destroy(); 
session_regenerate_id(true); 

當我使用網站,並通過購買過程中,收到頁面送達後,會話ID保持不變。

然而,我把上面的代碼放在一個名爲'regenerate.php'的獨立腳本中。然後我在另一個腳本調用此,像這樣:

<?php 
    include("regenerate.php"); 
    session_start(); 
    echo("<br>id:".session_id()); 

    include("regenerate.php"); 
    session_start(); 
    echo("<br>id:".session_id()); 

    include("regenerate.php"); 
    session_start(); 
    echo("<br>id:".session_id()); 

    include("regenerate.php"); 
    session_start(); 
    echo("<br>id:".session_id()); 
?> 

當我運行此腳本,然後會話ID每一個重生的腳本運行時間變化。但是,在重新啓動會話之前,我正嘗試提供相同的代碼無法工作。

有什麼理由可以在一種情況下工作,而不是其他情況?我認爲這可能是因爲文本已經被寫出來輸出,但它發生在兩種情況下。

回答

0

發送輸出到瀏覽器後,您無法在同一請求期間生成新會話。

只是因爲會話cookie已經被髮送 - 帶有標頭。所以很可能你第二次打電話給session_start()會給出錯誤。

你可以找到更多關於車削display_errors在這裏:How do I get PHP Errors to display?

相關問題