簡體   English   中英

Unlink()不會刪除文件

[英]Unlink() doesnt remove file

我在logout.php中有此代碼

  session_start(); 
  $FileLink = 'tmp/sess_'.session_id();
      //echo $FileLink ; shows the tmp/sess_3386911cc664626ffb3664c478c8ad55 file
  unlink($FileLink); 
  session_unset();
  session_destroy();

我已經讀過很多帖子說同樣的方法,但是我沒有刪除會話文件。

有什么事嗎?

我已經嘗試了所有的一切。 如果是file,iswritable,可讀,is path,將路徑更改為完整路徑,則沒有任何作用,只是未設置會話,文件將為0字節,但未刪除。

有什么建議嗎?

編輯我的php.ini

  session.save_handler = "files"
  session.save_path = "/home/website/public_html/gallery/tmp"
  session.use_cookies = 1
  session.use_only_cookies = 1
  session.name = "PHPSESSID"
  session.auto_start = 0
  session.cookie_lifetime = 0
  session.cookie_path = "/"
  session.cookie_domain = ""
  session.cookie_httponly = ""
  session.serialize_handler = "php"
  session.gc_probability = 1
  session.gc_divisor = 1000
  session.gc_maxlifetime = 1440
  session.bug_compat_42 = ""
  session.bug_compat_warn = ""
  session.referer_check = ""
  session.entropy_length = 0
  session.cache_limiter = "nocache"
  session.cache_expire = 180
  session.use_trans_sid = 0
  session.hash_function = 0
  session.hash_bits_per_character = 5

EDIT2文件夾權限

tmp文件夾是755,並且嘗試使用777仍然是相同的,即使文件是可讀或可寫的,也嘗試過,但我確實是這樣。

您正在使用什么操作系統,我在這里看到一個非utf8字符:

echo $FileLink ; shows the tmp/sess_hkhgdfhghgöfhghggsöh file

我知道在ubuntu上那些字符被替換為? 標記,可能是問題所在?

請嘗試以下任一方法:

1)在文件夾上執行readdir並輸出文件名:

if ($handle = opendir('tmp')) {
    while (false !== ($entry = readdir($handle))) {
        echo "$entry\n";
    }
    closedir($handle);
}

2)將非字母數字替換為問號:

$FileLink = preg_replace("/[^A-Za-z0-9 ]/", '?', $FileLink);
unlink($FileLink); 

最終,session_id()會給您提供非utf8字符的問題,我現在正在研究中。

3)通過設置無效的ID將文件所有權設置為NoBody:

chown($FileLink, 666);

4)在創建會話之前,自己創建會話文件:

$fp = fopen('tmp/sess_3386911cc664626ffb3664c478c8ad55', 'w+');
fclose($fp);
session_id('3386911cc664626ffb3664c478c8ad55');
session_start();

您可以復制PHP用於創建會話名稱的算法。 我希望刪除后可以正常工作。

僅用於測試目的。

我不知道這是否有用,但是下面的測試代碼被證明是成功的。

<?php
session_start();

$ses_id = session_id();
echo $ses_id;

$filename = 'test_folder/sess_'.$ses_id;
$fp = fopen($filename, 'w');
fwrite($fp,"");
fclose($fp);

unlink($filename);

編輯

在這一點上,我能想到的是,您可以嘗試從上一頁獲取會話的變量,然后它看起來像:

[第一頁]

session_start(); 
$ses_id = "sess_" .session_id();

echo '<a href="check_session.php">Check session</a>';

[登出頁面]

session_start(); 
$FileLink = 'tmp/sess_'.$ses_id;

unlink($FileLink); 
session_unset();
session_destroy();

[檢查會話](check_session.php)

<?php
session_start();

if(!empty($_SESSION)){
    echo "sess_" .session_id();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM