PHP oturum dosyası boş sorunu nasıl giderilir?

4 Cevap php

Ben PHP oturumu için çok basit bir test sayfası var.

<?php
session_start();

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

var_dump($_SESSIONS);

?>

Sayfayı yenileyerek sonra, her zaman göstermek

array
  'views' => int 0

Çevre XAMPP 1.7.3 olduğunu. I) (PHPInfo kontrol etti. Oturum etkindir.

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

Klasördeki: sayfasına erişildiğinde, oturum dosyası sess_lnrk7ttpai8187v9q6iok74p20 Benim "\ xampp \ tmp D" oluşturuldu yoktur. Ama içeriği boş.

Kundakçı, ben oturum hakkında çerezleri görebilirsiniz.

Cookie  PHPSESSID=lnrk7ttpai8187v9q6iok74p20

Bu oturum veri dosyaları temizlendi değil gibi görünüyor.

Sorun çekmek, bu konu için herhangi bir yol ya da yön var mı?

Teşekkürler.

4 Cevap

BTW, o $_SESSION değil $_SESSIONS.

Bu nedenle neden bu verileri tasarruf değildir.

Ayarlamanız gerekir değişken denir $_SESSION değil $_SESSIONS

İşte ne yaptım ...

  • Php için sqlite yükleyin (php5 beri varsayılan olarak yüklenmiş ve etkinleştirilmiş) php5 daha eski ise.

  • Php.ini satırı değiştirin (konumu için php-i> phpinfo (bkz.) veya run) ..

session.save_handler = dosya

karşı

session.save_handler = sqlite

  • Sonra aynı dosya (php.ini) emin UYARILAR açıktır olun

error_reporting = E_ALL

  • php.ini değiştirdiyseniz Apache'yi yeniden

/ Etc/init.d/apache2 restart

Now you will be getting a sensible error message most likely revealing you dont have correct permissions karşıyour session.save_path so ...

  • Find out your web services user and group unless known. There are several ways karşıdo so but I placed this line temporarily in my php code ...

print_r (posix_getpwuid (posix_getuid ()));

Ve ben kullanıcı www-data ve grup www-data benim ispconfig3 tarafından bu web kullanıcı için ayarlanmış olduğunu bulmuşlardır.

  • Web kullanıcı için web yolu (muhtemelen / var / www) üzerinde bir oturum dizin yapmak.

    sudo mkdir /var/www/whatever; sudo chown <user_from_last_step>:<group_from_last_step> /var/www/whatever

    örneğin> sudo chown www-data: www-data / var / www / ne olursa olsun

  • Yine php.ini dosyasında emin session.save_path, gibi bir şey yorumladı emin olun ...

; Session.save_path = / var/lib/php5

ama

session.save_path = / var/lib/php5

  • Apache'yi yeniden eğer düzenlenmiş php.ini

  • Now go karşıyour php code (Many have a SetEnv.php ish type script which does some global stuff and is imported by all files) and add the following line BEFORE you call session_start() ...

ini_set ('session.save_path', '0; 0750 ;/ var / www / ne olursa olsun ');

Note that we set session.save_path in your code rather than in php.ini karşıhelp keep it secure, so karşıreplace 'whatever' with something inventive would be useful.

By now it should appear karşıbe working, ama quite, it doesent work accross ajax requests for some reason that I dont care about related karşısqlite ... so ...

  • Go back karşıyour php.ini file and change the line ...

session.save_handler = sqlite

geri

session.save_handler = dosya.

  • restart apache

:) Sabit Umarım: |

$ _SESSION kullanımı ve print_r ($ _SESSION) ile kontrol;

              <?php
                 session_start();

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

              print_r($_SESSION);

              ?>