2011-07-19 78 views
3

我有一個PHP代碼,它使用session_start()開始會話。那麼在用戶登錄後,會被帶到profile.php,它顯示用戶信息。但是當用戶重新加載頁面時,會話消失了。有什麼辦法可以維持一小時嗎?我試過cookies,但我不知道如何告訴PHP會話已經啓動。謝謝!使用cookies維護PHP session_start()

餅乾和會話啓動

Profile.php代碼:

if(isset($HTTP_COOKIE_VARS['session'])){ 
    session_start(); 
} else { 
    header('Location: index.php'); 
} 

登錄代碼:它檢查會話

session_start(); 

$_SESSION['pass'] = $password; 
header('Location: ../profile.php'); 
setcookie("session","1",time()+3600,"/"); 

代碼:

if($_SESSION['pass'] == $tableArray[0]['password']) { 
    $username = $tableArray[0]['name']; 
    $avatar = $tableArray[0]['avatar']; 
} else { 
    header('Location: index.php'); 
} 

我打電話session_destroy() on here:

<li><a href=<?php session_destroy(); echo "index.php"?>>Logout</a></li> 

忘了PHP在HTML之前運行:P這是問題!

+0

是您的會話名稱「會話」?您在登錄代碼中未使用session_name('session')'將其名稱設置爲'session'。默認情況下,會話名稱(和cookie名稱)是'PHPSESSID' –

回答

3
  • 你不調用在session_start()再次或
  • 你調用session_destroy();在任何地方的文件
+0

我只調用'session_destroy();'on'

  • >Logout
  • ' – pmerino

    +1

    然後你就叫它總是。 PHP在服務器上執行,爲此用戶甚至可以看到鏈接:-) – Rufinus

    +0

    嗯,它看起來就是這個問題:D謝謝! – pmerino

    0

    我懷疑你不是在profile.php上再次打電話session_start()

    您必須在將訪問會話數據的每個腳本上調用session_start()

    更新代碼發佈後

    不是檢查會話cookie的存在,而不是做這樣的事情:

    // Start the session first 
    session_start(); 
    if (isset($_SESSION['username'])) { 
        // user is already logged in 
    } else { 
        header('Location: index.php'); 
    } 
    
    +0

    抱歉,我現在要發佈代碼 – pmerino

    +0

    @ zad0xsis好的,我在看到您的代碼後更新了我的答案。 –

    +0

    那不是問題,那是我正在調用session_destroy();並忘記了PHP代碼在HTML – pmerino

    0

    嘗試設置session.use_cookies是對(在php.ini/.htaccess)

    0

    您必須對的頂部說session_start()需要知道會話數據的腳本。

    會話cookie真的沒有你的顧慮,你應該考慮一個「實現細節」。 (cookie將平時住在用戶的瀏覽器,直到瀏覽器退出。)

    +0

    之前運行我剛剛嘗試過,但每次頁面重新加載時都不起作用。用代碼編輯來檢查會話 – pmerino

    +0

    不,不要說'isset($ HTTP_COOKIE_VARS ['session']))' - 你不知道會話cookie被調用了什麼!停止考慮cookie,只是從會話角度思考。忘記一共有餅乾。 –

    1

    從技術上說,我找到了解決方案。

    有一樣東西已經指定更改保存路徑字符串,否則更改您的會話存儲目錄的權限。

    我做到了這一點,它爲我工作。

    如果您的會話存儲在會話目錄,然後執行以下操作:

    chmod 777 session/