2017-08-07 78 views
0

我已經看過這裏和其他地方的一切,似乎沒有任何工作!頁面加載時PHP會話Id重置

這裏的問題:

  • 在頁面加載,在調用session_start(),我得到分配一個PHP會話ID。
  • 一旦我刷新頁面,我得到一個新的會話ID,並使$_SESSION變量變空。

PHP版本是:5.6.30-0+deb8u1

我做了一個小腳本複製應用程序之外:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

echo '<pre>'; 
echo 'orig session.cookie_domain = '.ini_get('session.cookie_domain').PHP_EOL; 
echo 'orig session.cookie_secure = '.ini_get('session.cookie_secure').PHP_EOL; 
ini_set('session.cookie_domain', '.mydomain.com'); 
ini_set('session.cookie_secure', 'Off'); 
echo 'new session.cookie_domain = '.ini_get('session.cookie_domain').PHP_EOL; 
echo 'new session.cookie_secure = '.ini_get('session.cookie_secure').PHP_EOL; 
echo '-------------'.PHP_EOL; 
print_r($_COOKIE); 
session_start(); 
print_r($_COOKIE); 
setcookie(ini_get('session.name'), session_id(), 0, '/', ini_get('session.cookie_domain'), false, false); 
print_r($_COOKIE); 
echo '-------------'.PHP_EOL; 
echo 'session id: '.session_id().PHP_EOL; 
echo '-------------'.PHP_EOL; 
$_SESSION[session_id()][] = date('Y-m-d H:i:s'); 
print_r($_SESSION); 
echo '</pre>'; 
//phpinfo(); 

腳本的輸出爲:

orig session.cookie_domain = 
orig session.cookie_secure = 
new session.cookie_domain = .mydomain.com 
new session.cookie_secure = Off 
------------- 
Array 
(
    [__cfduid] => ddxxx 
    [_ga] => GA1.2.xxxx 
    [wp-settings-time-2] => 1500996194 
    [_gid] => GA1.3.xxxx 
) 
Array 
(
    [__cfduid] => ddxxx 
    [_ga] => GA1.2.xxxx 
    [wp-settings-time-2] => 1500996194 
    [_gid] => GA1.3.xxxx 
) 
Array 
(
    [__cfduid] => ddxxx 
    [_ga] => GA1.2.xxxx 
    [wp-settings-time-2] => 1500996194 
    [_gid] => GA1.3.xxxx 
) 
------------- 
session id: 7n4mm16s525mpqo99r242p90l3 
------------- 
Array 
(
    [7n4mm16s525mpqo99r242p90l3] => Array 
     (
      [0] => 2017-08-07 16:01:18 
     ) 

) 
+0

聽起來就像是沒有正確設置你的域名。與您所設置的相比,您使用的實際域名是什麼? –

+0

你打算在瀏覽器中使用哪個URL?你真的需要設置cookie_domain嗎?不只是使用主機,你的用例是什麼? –

+0

@JonStirling在子域上有一個臨時環境,這就是爲什麼。不設置它也是一樣的。 – pycvalade

回答

0

經過大量的研究,它出現了Varnish緩存導致的問題。問題在於Varnish在沒有設置會話cookie的情況下緩存頁面,刷新頁面後無效。

禁用服務器上的Varnish解決了我的問題。

也發現了這個對於那些誰希望保持光油活躍,但獲得的會話工作:Cache-Control Header Fix

0

做到這一點,以保留現有會話:

if(session_status() !== PHP_SESSION_ACTIVE) { 
    session_start(); 
} 
+0

仍然無法正常工作..在應用程序中,我也使用這個沒有成功: if(!session_id()){ session_start(); } – pycvalade