2010-03-26 75 views
0

我有一個非常簡單的PHP會話測試頁面。如何解決PHP會話文件空問題?

<?php 
session_start(); 

if (isset($_SESSIONS['views'])) 
{ 
    $_SESSIONS['views'] = $_SESSIONS['pv'] + 1; 
} 
else 
{ 
    $_SESSIONS['views'] = 0; 
} 

var_dump($_SESSIONS); 

?> 

刷新頁面後,總是顯示

array 
    'views' => int 0 

環境是XAMPP 1.7.3。我檢查了phpInfo()。會話已啓用。

Session Support  enabled 
Registered save handlers files user sqlite 
Registered serializer handlers php php_binary wddx 

Directive Local Value Master Value 
session.auto_start Off Off 
session.bug_compat_42 On On 

當頁面被訪問時,那裏是我的會話創建文件sess_lnrk7ttpai8187v9q6iok74p20 「d:\ XAMPP \ tmp目錄」 文件夾中。但內容是空的。

藉助Firebug,我可以看到關於會話的cookies。

Cookie PHPSESSID=lnrk7ttpai8187v9q6iok74p20 

看起來會話數據不會刷新到文件。

有什麼方法可以解決這個問題嗎?

謝謝。

+0

我是多麼愚蠢。感謝所有的迴應。 –

+0

只是一個像我一樣愚蠢的筆記 - 如果磁盤(在其上寫入會話文件)未充滿,請重新檢查。 – commonpike

回答

5

順便說一句,它是$_SESSION不是$_SESSIONS

因此爲什麼它不保存數據。

5

你需要設置的變量稱爲$_SESSION$_SESSIONS

+0

打敗你7秒。 :) –

+0

noooooooooooooo – nickf

0

繼承人我做了什麼......

  • 用於安裝PHP源碼如果(安裝和自PHP5默認啓用),比舊的PHP5 。

  • 在你的php.ini(對於位置看到phpinfo()函數或運行> PHP -i)改線..

session.save_handler =文件

session.save_handler =源碼

在同一個文件(php.ini中)確保通告
  • 然後接通

的error_reporting = E_ALL

  • 重啓Apache,如果你改變的php.ini

/etc/ini噸。d/Apache2的重啓

現在,你將最有可能得到一個有意義的錯誤消息透露你沒有正確的權限,您的session.save_path所以......

  • 找出你的Web服務的用戶和組除非知道。 有幾種方法可以這樣做,但我在我的PHP代碼暫時放在這條線...

的print_r(posix_getpwuid(posix_getuid()));

我發現用戶www-data和group www-data是由我的ispconfig3爲這個web用戶設置的。

  • 在web用戶的web路徑(可能是/ var/www)上建立一個會話目錄。

    sudo mkdir/var/www/whatever; 須藤CHOWN <user_from_last_step>:<group_from_last_step>在/ var/WWW /不管

    例如>須藤CHOWN WWW的數據:WWW的數據/無功/網絡/不管你的php.ini

  • 再次文件確認的session.save_path被註釋掉,像...

;的session.save_path =在/ var/lib中/ PHP5

但不

的session.save_path =在/ var/lib中/ PHP5

  • 重啓Apache如果您編輯的php.ini

  • 現在去你的PHP代碼(許多人都有一個SetEnv.php ish類型的腳本,它執行一些全局的東西,並被所有文件導入)並添加以下行之前,您調用ses sion_start()...

的ini_set( 'session.save_path的', '0; 0750; /無功/網絡/不管');

請注意,我們在您的代碼中設置session.save_path而不是在php.ini中以幫助保持安全,因此用某些創新替換「任何」會很有用。

現在應該看起來是工作,但並不完全,它doesent工作翻過出於某種原因,我不關心有關SQLite的Ajax請求......所以......

  • 返回你的php.ini文件並更改行...

session.save_handler = sqlite的

session.save_handler =文件。

  • 重啓Apache

固定:)希望:|

0

使用$ _SESSION並通過print_r($ _ SESSION)檢查它;

   <?php 
       session_start(); 

      if (isset($_SESSION['views'])) 
       { 
       $_SESSION['views'] = $_SESSION['pv'] + 1; 
       } 
      else 
      { 
       $_SESSION['views'] = 0; 
      } 
       echo "<pre>"; 

       print_r($_SESSION); 

       ?>